J'essaie de simuler le roulement d'un dé 100 fois et j'imprime les résultats du nombre de 1/2/3/4/5/6 j'ai atterri. Voici mon code jusqu'à présent: j'essaie d'utiliser une boucle while pour mon affectation, et je dois utiliser (Math.random () * 6 + 1) pour générer des nombres.

public class RollingDice {

    public static void main(String args[]) {

        int count = 0; // number of times die was rolled
        int count1s = 0; // number of times 1 was rolled
        int count2s = 0; // number of times 2 was rolled
        int count3s = 0;
        int count4s = 0;
        int count5s = 0;
        int count6s = 0;

        while (count < 100) {
            count1s = (int) (Math.random( )*6 + 1);
            count2s = (int) (Math.random( )*6 + 1);
            count3s = (int) (Math.random( )*6 + 1);
            count4s = (int) (Math.random( )*6 + 1);
            count5s = (int) (Math.random( )*6 + 1);
            count6s = (int) (Math.random( )*6 + 1);

            count++;

    }
        System.out.println("Number of times the die was rolled: "+ count);
        System.out.println("Number of times 1 was rolled: " + count1s);
        System.out.println("Number of times 2 was rolled: " + count2s);
        System.out.println("Number of times 3 was rolled: " + count3s);
        System.out.println("Number of times 4 was rolled: " + count4s);
        System.out.println("Number of times 5 was rolled: " + count5s);
        System.out.println("Number of times 6 was rolled: " + count6s);

    }
}

Mon code s'imprime actuellement:

Number of times the die was rolled: 100
Number of times 1 was rolled: 3
Number of times 2 was rolled: 1
Number of times 3 was rolled: 5
Number of times 4 was rolled: 2
Number of times 5 was rolled: 4
Number of times 6 was rolled: 4

Comme vous pouvez le voir, il roule 100 fois, mais ne sauvegarde que les résultats de 1 rouleau, pas 100, comment résoudre ce problème?

0
Ryan 24 juil. 2017 à 06:37

2 réponses

À chaque itération de votre boucle while, vous réaffectez la valeur de count1s, count2s et les autres. Au lieu de cela, vous devez «lancer les dés», voir quelle est sa valeur et incrémenter la variable appropriée.

while (count < 100) {
    int diceRoll = (int) (Math.random() * 6 + 1);
    if (diceRoll == 1) 
        count1s++;
    else if (diceRoll == 2)
        count2s++;
    // ... you get the idea

    count++;
}

Et comme une note amusante, en utilisant Java 8, il existe un moyen beaucoup plus facile et plus cool de le faire.

        Stream.generate(() -> (int) (Math.random() * 6 + 1))
             .limit(100L)
             .collect(Collectors.groupingBy(num -> num, 
                 Collectors.counting()))
             .forEach((num, count) -> System.out.println("number of times " + num + " was rolled: " + count));
3
Matthew Meacham 24 juil. 2017 à 03:47

À chaque itération, vous remplacez les données du rouleau précédent.Vous pouvez réécrire la logique comme

// initialization
while(count < 100){
   int currentRoll = (int) (Math.random() * 6 + 1);
   if(currentRoll == 1)
      count1s++;
  // Same logic for all occurances
}
1
Don Mathew 24 juil. 2017 à 03:48