我正在尝试编写一个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]);
}
}
答案 0 :(得分:3)
您的问题(至少是问题中的问题)正好在
行中++frequency[(rollDice()*diceNumber)];
不是滚动n个骰子并将它们相加,而是滚动1个骰子并将其乘以n。 你会想要像
这样的东西int sum = 0;
for(int i = 0;i<diceNumber;i++)
sum+=rollDice();
++frequency[sum];
这将更准确地模拟骰子,因为每个骰子都有单独的骰子。