Je dois stocker les données dans le tableau 2d, puis imprimer la moyenne du prix qui a l'option disponible "non", peut anyody aider à trouver la moyenne.
public class Test { public static void main(String[] args) { double total = 0; Products[][] names = new Products[][]{ {new Products("k7580", 6500, "yes")}, {new Products("k8570", 7333, "no")}, {new Products("k8580", 766, "no")}, {new Products("k6580", 288, "yes")} }; for (int i = 0; i < names.length; i++) { for (int j = 0; j < names[i].length; j++) { String available = names[i][j].getAvailable(); if (available.equals("no")) { total = total + names[i][j].getPrice(); } } System.out.println(""); } // from here I am not able to find average double average = total / names.length; System.out.println("average of price :" + average); } }
3 Réponses :
Vous devez définir une variable de count
qui l'incrémentera à chaque fois en fonction de votre condition if ( available.equals("no")
) pour ne compter que l'élément qui remplit la condition:
double total = 0; Products[][] names = new Products[][] { { new Products("k7580", 6500, "yes") }, { new Products("k8570", 7333, "no") }, { new Products("k8580", 766, "no") }, { new Products("k6580", 288, "yes") } }; int count = 0; for (int i = 0; i < names.length; i++) { for (int j = 0; j < names[i].length; j++) { String available = names[i][j].getAvailable(); if (available.equals("no")) { count++; total +=names[i][j].getPrice(); } } System.out.println(""); } // from here I am not able to find average double average = total / count; System.out.println("average of price :" + average);
Vous n'avez pas besoin de définir un tableau 2d, il suffit de maintenir un tableau 1d de produits et de maintenir un nombre d'articles éligibles qui doivent être pris en compte pour la moyenne (dans votre cas, les articles qui ne sont pas disponibles)
Ce code s'exécutera dans une seule boucle sans avoir besoin de boucles imbriquées
public class Test { public static void main(String[] args) { double total = 0; int notAvailableItems = 0; Products[] names = new Products[] { new Products("k7580", 6500, "yes") , new Products("k8570", 7333, "no") , new Products("k8580", 766, "no") , new Products("k6580", 288, "yes")} ; for (int i = 0; i < names.length; i++) { Products product = names[i]; if(product.getAvailable().equals("no")) { total = total + product.getPrice(); notAvailableItems++; } } double average = total /(double)notAvailableItems; System.out.println("average of price :" + average); } }
Production - prix moyen: 4049,5
Si vous utilisez Java 8 ou supérieur, vous pouvez l'utiliser:
average of price :4049.5
La sortie est:
public static void main(String[] args) { Products[][] names = new Products[][]{ {new Products("k7580", 6500, "yes")}, {new Products("k8570", 7333, "no")}, {new Products("k8580", 766, "no")}, {new Products("k6580", 288, "yes")} }; Arrays.stream(names) .flatMap(array -> Arrays.stream(array)) .filter(products -> products.getAvailable().equals("no")) .mapToDouble(Products::getPrice) .average() .ifPresent(average -> System.out.println("average of price :" + average)); }
Comme vous le voyez, il est concis. J'ai utilisé stream ici. Stream aide à réduire la verbosité du code.
Le problème est que
names.length
n'est pas le nombre d'objetsProduct
. Vous avez déclaré lename
tant que tableau 2D. Vous devez en fait compter les objetsProduct
.L'autre solution serait de transformer les
names
en un tableau 1-D. (Est - il besoin d'être 2-D pour une raison qui n'est pas apparente dans votre exemple?)En remarque, ne serait-il pas mieux si
available
dans la classeProducts
(qui devrait probablement êtreProduct
, de toute façon) était un booléen au lieu d'une chaîne "yes" / "no"?oui c'était une réponse géniale vous les gars. non j'ai une table avec le nom de colonne disponible avec l'option "oui" ou non, donc je dois aller avec la question et il est également obligatoire de conserver les données dans le tableau 2d.