-4

问题:求 600 次掷骰的频率(即掷出的数字)。这是我到目前为止的代码,我似乎被困在某个地方,但我就是不知道错误在哪里;如果有人可以帮助我,那就太好了。

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

    }
}
4

3 回答 3

1

使用 Random.nextInt(6),而不是 Math.random() * 6。

如果有疑问,请参阅此问题以了解原因。

于 2013-06-15T20:23:45.450 回答
1

您的问题是您打印的输出完全错误。

打印出%标志的正确方法是使用%%,请参阅Formatter javadoc。如果不转义此变量,它会认为您正在尝试使用一些特殊的语法。修复后,您需要打印实际的 perctanges,而不是您当前使用的卷数。

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

也作为较小的问题,

  1. 你不需要在这里投双倍

    pct1 = (c1 * 100.0) / (double)toRoll;应该成为 pct1 = (c1 * 100.0) / toRoll;

  2. 获得从 1 到 6 的随机数的首选方法是

    随机.nextInt(6)+1;

于 2013-06-15T21:02:09.680 回答
0

您错过了pctx打印时的值。

尝试打印

System.out.printf("1\t%d\t%10.1f\n", c1, pct1);
...
于 2013-06-15T20:26:49.300 回答