0
votes

trouver la moyenne du prix?

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);
    }
}


4 commentaires

Le problème est que names.length n'est pas le nombre d'objets Product . Vous avez déclaré le name tant que tableau 2D. Vous devez en fait compter les objets Product .


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 classe Products (qui devrait probablement être Product , 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.


3 Réponses :


2
votes

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);



1
votes

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


0 commentaires

2
votes

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.


0 commentaires