【问题标题】:Dice Statistics Program骰子统计程序
【发布时间】:2014-08-25 01:50:34
【问题描述】:

我正在尝试编写一个 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]);
    }
}

【问题讨论】:

  • 现在你每卷只掷一个骰子,然后将该值乘以diceNumber。您实际上需要 roll diceNumber 次(即使用另一个循环)。
  • main中没有调用方法

标签: java arrays probability stat dice


【解决方案1】:

你的问题(至少是问题中的那个)是正确的

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

您不是掷 n 个骰子并将它们相加,而是掷 1 个骰子并将其乘以 n。 你会想要类似的东西

int sum = 0;
for(int i = 0;i<diceNumber;i++)
    sum+=rollDice();
++frequency[sum];

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

【讨论】:

  • 我做了更改,我替换了 n ++frequency[(rollDice()*diceNumber)];与 int 总和 = 0; for(int i = 0;i
猜你喜欢
  • 2021-12-26
  • 2015-07-18
  • 2021-08-19
  • 2020-09-18
  • 2014-04-21
  • 2021-03-23
  • 1970-01-01
  • 2019-03-04
  • 2020-09-05
相关资源
最近更新 更多