2013-06-15 3 views
-4

La question: Trouvez la fréquence des rouleaux de dés (c'est-à-dire le nombre de rouleaux) pour 600 rouleaux de dés. Ceci est le code que j'ai jusqu'à présent, et je semble être coincé quelque part, mais je ne peux pas comprendre où se trouve l'erreur; Si quelqu'un pouvait m'aider, ce serait génial.Fréquence des rouleaux de dés

public class diceroll 
{ 

    /** 
    * 
    */ 
    public static void main(String[] args) 
    { 
     int toRoll = 600, x,i=0, c1 = 0, c2 = 0, c3 = 0, c4 = 0, c5 = 0, 
     c6 = 0; 
     double pct1, pct2, pct3, pct4, pct5, pct6; 

     for (i=0;i<=toRoll; i++) 
     { 
      x = (int)(Math.random()*6)+1; 
      if (x==1) 
       c1++; 
      else if (x==2) 
       c2++; 
      else if (x==3) 
       c3++; 
      else if (x==4) 
       c4++; 
      else if (x==5) 
       c5++; 
      else if (x==6) 
       c6++; 
     } 
     pct1 = (c1 * 100.0)/(double)toRoll; 
     pct2 = (c2 * 100.0)/(double)toRoll; 
     pct3 = (c3 * 100.0)/(double)toRoll; 
     pct4 = (c4 * 100.0)/(double)toRoll; 
     pct5 = (c5 * 100.0)/(double)toRoll; 
     pct6 = (c6 * 100.0)/(double)toRoll; 

     System.out.printf("Face\tFrequency\t%\n"); 
     System.out.printf("-------------------\n"); 
     System.out.printf("1\t%d\t%10.1f\n", c1); 
     System.out.printf("2\t%d\t%10.1f\n", c2); 
     System.out.printf("3\t%d\t%10.1f\n", c3); 
     System.out.printf("4\t%d\t%10.1f\n", c4); 
     System.out.printf("5\t%d\t%10.1f\n", c5); 
     System.out.printf("6\t%d\t%10.1f\n", c6); 

    } 
} 
+1

Quels sont les symptômes? Quel débogage as-tu fait? –

+0

System.out.printf a besoin d'un autre paramètre. celui à virgule flottante. – gkovacs90

+1

Je ne vois pas de question. – DannyMo

Répondre

1

Utilisez Random.nextInt (6), plutôt que Math.random() * 6.

Voir this question pourquoi, en cas de doute.

0

Vous avez manqué les valeurs pctx lors de l'impression.

impression Essayez avec

System.out.printf("1\t%d\t%10.1f\n", c1, pct1); 
... 
1

Votre problème est que vous imprimez les sorties complètement faux.

La méthode correcte pour imprimer un signe % consiste à utiliser %%, voir le Formatter javadoc. Sans échapper à cette variable, il pense que vous essayez d'utiliser une syntaxe spéciale. Après avoir déterminé que vous avez besoin d'imprimer vos perctanges réels, pas le nombre de rouleaux que vous utilisez actuellement.

System.out.printf("Face\tFrequency\t%%\n"); 
System.out.printf("-------------------\n"); 
System.out.printf("1\t%f\t%%10.1f\n", pct1); 
System.out.printf("2\t%f\t%%10.1f\n", pct2); 
System.out.printf("3\t%f\t%%10.1f\n", pct3); 
System.out.printf("4\t%f\t%%10.1f\n", pct4); 
System.out.printf("5\t%f\t%%10.1f\n", pct5); 
System.out.printf("6\t%f\t%%10.1f\n", pct6); 

De plus en plus petits problèmes,

  1. Vous n'avez pas besoin de jeter à un double ici

    pct1 = (c1 * 100.0)/(double)toRoll; devrait devenir pct1 = (c1 * 100.0)/toRoll;

  2. Le meilleur moyen d'obtenir un nombre aléatoire de 1 à 6 est

    random.nextInt (6) +1;