滚动两个骰子并获得平均数

时间:2018-04-18 01:28:49

标签: java

我正在编写一个java程序,模拟滚动两个骰子并在两个骰子没有相同面时递增计数器。经过多次滚动后,我想打印出平均值。

int i = 0;
int count = 0;
double average = 0;
int j = 0;

while (i<1000) {
    int dice1 = getRandom(1,6);
    int dice2 = getRandom(1,6);

    if (dice1 != dice2) {
        count++;
        }
    while (j!= 1000) {
        average = (count/j);
        j++;
    }
    i++;
}
System.out.println(average)

程序没有给出平均值,因为我很确定嵌套的while循环是错误的写入的?

getRandom()函数返回1到6之间的随机值,因为骰子可以有6个值。

private static int getRandom(int n1, int n2){
    int retVal = 0;

    retVal = n1 + (int) Math.floor(Math.random() * (n2 - n1 + 1));

    return retVal;
}

我是java的初学者,希望得到一些帮助。

2 个答案:

答案 0 :(得分:1)

你的逻辑应该是:

  • 制作一些骰子卷,并记录不等卷的数量和卷的总数
  • 然后取环

这样的事情:

static final int NUM_ROLLS = 1000;

for (int i=0; i < NUM_ROLLS; ++i) {
    int dice1 = getRandom(1,6);
    int dice2 = getRandom(1,6);

    if (dice1 != dice2) {
        count++;
    }
}

double average = 1.0*count / NUM_ROLLS;
System.out.println(average)

请注意,在除法乘以1.0时,要强制进行双精度除法。

我在你的代码中看到的最大的问题是你在循环中取平均值,这没有意义,因为你的非等卷的计数还没有完成。

答案 1 :(得分:1)

更好地命名变量。

  • 而不是i,请将其称为rolls
  • 而不是count,请将其称为nonmatching

然后你会发现你有第三个不必要的变量叫j,它实际上没有为解决方案提供任何东西(除了当前问题的主要部分)。

以他们为您提供价值的方式命名变量是一件困难的事情。及早开始使用它,在重读代码时比其他任何技能都能节省更多时间。

对于指针,请阅读&#34;故意命名&#34;这意味着,&#34;命名变量如何使用它&#34;而不是显而易见的&#34;按照你想要命名的方式命名它&#34; (我发誓我听说开发人员用那种方式描述它/颤抖/)

是的,您也可以在循环外进行一次计算。但如果你从正确的输入开始,你就会得到正确的答案。