-1
votes

Comment trouver le nombre moyen dans un tableau qui a déjà été construit

Comment pourrais-je écrire une méthode qui renvoie le poids moyen des boîtes d'un tableau. Supposons que les boîtes de tableau ont été construites. Ne peut pas non plus supposer que chaque élément du tableau a été construit. Si le tableau est vide, la méthode doit renvoyer 0.0. C'est ce que j'ai en ce moment mais je suis très perdu.

public class Question03 {
    //The array of boxes to be used by the method "getAverageWeight()"
    //This property is public for testing purposes
    public Box[] boxes;
    
    public double getAverageWeight()
    {
        int h = boxes.length;
        double avg = 0.0;
        for(int i = 0;i<boxes.length;i++)
        {
            if(boxes[i] == null)
            {
                h--;
            }
        }
        return avg;
    }
}


1 commentaires

Cette question, ainsi que votre autre sur l’arithmétique avec des tableaux, me font penser que vous demandez à SO de vous aider à faire vos devoirs. Consultez les conseils pour le faire correctement ici: meta.stackoverflow.com/questions/334822/… . En gros, essayez d'abord quelque chose, puis postez une question sur la façon dont ce que vous avez essayé ne fonctionne pas.


5 Réponses :


0
votes

"Continuer" si ce n'est pas construit et assurez-vous de faire la somme des poids

Ensuite, vous pouvez simplement renvoyer la somme de tous les poids divisée par le nombre de boîtes construites

Je vous suggère également de vous assurer d'éviter l'écart de 0 -> simple ajouter un contrôle si h == 0 et renvoyer 0 à la place

public double getAverageWeight()
    {
        
        
        int h = boxes.length;
        double sumWeight=0.0;
        for(int i = 0;i<boxes.length;i++)
        {
            if(boxes[i] == null)
            {
                h--;
                continue;
            }
            sumWeight+=boxes[i].getWeight();
        }

        return sumWeight/h;
    }


4 commentaires

cela fonctionne mais comment pourrais-je faire en sorte que si la valeur était nulle dans le tableau, elle serait définie sur 0,0?


Vous pouvez simplement créer une nouvelle boîte et définir la valeur à 0,0 à l'intérieur si les boîtes de condition [i] = nouvelle boîte (0,0); h--; continuer;


@ArvindKumarAvinash Bon point de votre part.


Ce serait beaucoup plus agréable de définir h = 0; vérifier! = null, mettre la somme + dans le if, et ainsi de suite ...



1
votes

Très facile si vous utilisez des flux. average() renvoie un OptionalDouble afin que vous puissiez fournir une valeur par défaut si le tableau est vide.

Avg weight = 20.0

Tirages

double sum = 0;
int count = 0;
for (Box b : boxes) {
   if (b != null) {
      sum += b.getWeight();
      count++;
    }
}    
System.out.println("Avg weight = " + (sum/count));

ou plus traditionnellement

Avg weight = 20.0

Tirages

Box[] boxes =
        { new Box(10), new Box(20), null, null, new Box(30) };

double avg = Arrays.stream(boxes).filter(obj -> obj != null)
        .mapToDouble(Box::getWeight).average().orElse(0.);
System.out.println("Avg weight = " + avg);


0 commentaires

0
votes

si vous préférez travailler avec des flux sur des boucles, alors ce serait une implémentation fonctionnelle:

public double getAverageWeight(Box[] boxes) {

    Collection<Box> noNulls = Arrays.stream(boxes)
                                    .filter(b -> b != null)
                                    .collect(Collectors.toList());

    if (noNulls.isEmpty()) {
        return 0.0d;
    }
    
    double sum = noNulls.stream().map(b -> b.getWeight()).reduce(0.0d, (a,b) -> a+b);
    return sum / noNulls.size();
}


0 commentaires

0
votes

Vous pouvez le faire comme suit:

  1. Renvoie 0 si le tableau est null ou vide.
  2. Initialisez une variable (par exemple h dans le code ci-dessous) égale à la longueur du tableau et une autre (par exemple sum dans le code ci-dessous) égale à 0 . Utilisez la variable, h pour suivre les éléments non nuls tandis que sum pour collecter le poids de tous les éléments non nuls.
  3. Lors de la navigation dans le tableau, remplacez un élément null par une instance de Box .
  4. Enfin, renvoyez la moyenne sous forme de sum / h .

Démo:

public double getAverageWeight() {
    // If the array is empty the method should return 0.0. 
    if(boxes == null || boxes.length == 0) {
        return 0;
    }

    double sum = 0;
    int h = boxes.length;
    for(int i = 0; i < boxes.length; i++) {
        if(boxes[i] != null) {
            sum += boxes[i].weight;// Add the weight of each box to sum
        } else {
            boxes[i] = new Box();// Replace the null element with a Box object
            h--;
        }
    }

    // Return the average by dividing the sum by the count of boxes
    return sum / h;
}


1 commentaires

Je peux voir un vote défavorable. Je demande à l’électeur négatif de laisser un commentaire. Je promets de prendre vos commentaires de manière positive.



0
votes

La solution la plus courte serait d'utiliser Streams

double avg = Arrays.stream(boxes)
    .filter(Objects::nonNull)
    .mapToDouble(Box::getWeight)
    .average()
    .orElse(0);


0 commentaires