骰子统计程序

时间:2014-07-03 19:46:46

标签: java arrays probability stat dice

我正在尝试编写一个java程序,要求用户输入掷骰子的数量和掷骰子的次数。

到目前为止我写的程序并没有正确地掷骰子:如果我掷2个骰子,那么2和24应该有最少量的卷,中间数字将有最多的卷。现在它可以非常均匀地滚动每个数字。

有谁知道如何解决这个问题?

import java.util.Random;
import java.util.Scanner;

public class DiceStats {
    public static Random rand= new Random();

    public static int rollDice() {
        int dice;
        dice=(rand.nextInt(6)+1);   
        return dice;               // returns the sum dice rolls
    }

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.print("How many dice will constitute one roll? ");
        int diceNumber = input.nextInt();

        System.out.print("How many rolls? ");
        int rollNumber = input.nextInt();

        int[] frequency = new int[6*diceNumber+1];

        for (int i = 0; i < rollNumber; i++) {
            ++frequency[(rollDice()*diceNumber)];
        }

        System.out.printf("%s%10s\n", "Face", "Frequency");

        for (int face= diceNumber; face <frequency.length; face++)
            System.out.printf("%4d%10d\n", face, frequency[face]);
    }
}

1 个答案:

答案 0 :(得分:3)

您的问题(至少是问题中的问题)正好在

行中
++frequency[(rollDice()*diceNumber)];

不是滚动n个骰子并将它们相加,而是滚动1个骰子并将其乘以n。 你会想要像

这样的东西
int sum = 0;
for(int i = 0;i<diceNumber;i++)
    sum+=rollDice();
++frequency[sum];

这将更准确地模拟骰子,因为每个骰子都有单独的骰子。