此程序的第一个版本有效。我的问题是我不知道它为什么会起作用。我第一次使用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的解释。
答案 0 :(得分:1)
Math.random()
返回0到1之间的随机数
因此,如果你想要一个介于0和n之间的随机数,你只需要乘以n
现在,如果你想要一个介于m和n之间的数字,你会想要做那里做的事情:乘以n - m,然后加上m。
滚动介于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
。