J'essaie de calculer la moyenne d'un tableau uniquement pour les valeurs qui ne sont pas 0. Mon tableau est de taille 15, car il pourrait contenir jusqu'à 15 valeurs.

Lorsque je calcule la moyenne, il utilise les 15 valeurs, même si 12 d'entre elles sont égales à 0 au début. Comment éviter que les 0,0 ne soient pris en compte?

for(double element: majorA) {
       Sum += element;
}
average = sum / majorA.length;
System.out.printf("%.5f\n", average);

Le tableau n'est pas non plus un ensemble défini, mais dépend de ce que l'utilisateur saisit. Le tableau initial est:

double[] majorA = new double[15];

Obtient ensuite les valeurs selon les besoins:

majorA[0] = num1;
majorA[1] = num2;
...
1
EbenY 6 oct. 2020 à 17:54

3 réponses

Meilleure réponse

Je voudrais simplement ajouter un compteur qui garde une trace et l'utiliser au lieu de la longueur du tableau.

int count = 0;
for(double element: majorA) {
   if(element > 0.0) {
       Sum += element;
       count += 1;
   }
}
average = sum / count;
System.out.printf("%.5f\n", average);
2
Nathan Walsh 6 oct. 2020 à 15:07

Vous pouvez utiliser un compteur dans la boucle qui s'incrémente uniquement si le nombre! = 0

int count = 0;
for(double element: majorA) {
   if(element != 0.0){
       sum += element;
       count++;
   }
}
average = (count == 0) ? 0 : sum / count;
0
rya 6 oct. 2020 à 15:22

Vous pouvez le faire en une seule ligne avec

Arrays.stream(majorA).filter(d -> d != 0).average().orElse(0)

Cela filtrera toutes les valeurs qui sont 0 et calculera la moyenne. Même s'il n'y a plus rien dans le tableau affichera 0 à cause de .orElse(0)

1
Stoil Terziev 6 oct. 2020 à 16:02