用Java创建骰子滚轮。帮助我理解为什么会有效?

时间:2016-05-15 13:21:37

标签: java math random

几年前我停止了编程,因为我不认为我会毕业。惊喜,现在我,我不得不刷新生锈的新手技能。我决定从用Java编写的骰子滚动程序开始。这个程序的第一个版本只是吐出一个介于1和10之间的随机数。当我开始时,我计划用一个GUI来扩展它,允许用户选择掷骰子的数量和类型。

此程序的第一个版本有效。我的问题是我不知道它为什么会起作用。我第一次使用java.util.random并使用random.nextInt(),但范围很大,我无法弄清楚如何将其限制在特定范围内。

我在网上搜索并找到了有效的方法。这就是我所拥有的。

class DiceRoller {

    public static void main(String[] arguments){

        int min = 1;
        int max;
        int result;

        result = rollDice(10, min);

        System.out.println(result);
    }

    public static int rollDice(int maximum, int minimum){
        return ((int) (Math.random()*(maximum - minimum))) + minimum;
    }
}

我发现这项工作的具体部分是:

    public static int rollDice(int maximum, int minimum){
        return ((int) (Math.random()*(maximum - minimum))) + minimum;
    }

但我不明白为什么会这样。 Math类本身中的random()是否与java.util中的Random不同?为什么有必要取随机数并乘以最大值和最小值的差值,然后将结果加到最小值?说实话,我觉得愚蠢的问题,但我想理解为什么这个工作,而不是只是采取代码并使用它,因为它。

编辑:我知道..我知道..我应该只是阅读课程文档。无论如何,感谢你的幽默和回答。我很感谢回复,感谢Aaron的解释。

2 个答案:

答案 0 :(得分:1)

Math.random()返回0到1之间的随机数 因此,如果你想要一个介于0和n之间的随机数,你只需要乘以n 现在,如果你想要一个介于m和n之间的数字,你会想要做那里做的事情:乘以n - m,然后加上m。

滚动介于2和5之间的示例:

  • 我的0到1之间的随机数
  • 我将它乘以5 - 2 = 3.现在我有一个0到3之间的随机数
  • 我添加2.现在我有2到5之间的随机数

答案 1 :(得分:0)

return ((int) (Math.random()*(maximum - minimum))) + minimum;

这有4个部分(执行顺序): Math.random()使数字介于0和1之间。

*(maximum-minimim)获取范围(距离)max. and min.然后将随机数缩放到该范围。例如。 0.5*(100-0) = 50, 0*(100-0) = 0, 0.99*(100-0) = 99。并非此处的最低值为0,最高值为max. - min.

(int)取你拥有的数字,介于0和你的范围之间,并将它向下舍入,因为它将数字转换为int(我总是使用Math.round(), .floor(), or .ceil()所以我实际上对此感到惊讶

+ minimum通过将数字向上移动那么多来确保最低可能值(直到现在为0)为minimum。 (请记住,我们之前减去了最小值)现在可能的最高值为maximum