我想要一个范围从 0 到 3 的随机数,并尝试了以下代码只是为了看看它是如何工作的。
int[] count = new int[4];
for (int i = 0; i < 1000; i++) {
int t = (int)(Math.round((Math.random() *3)));
count[t] +=1;
}
for (int i = 0; i < count.length; i++) {
System.out.println(count[i]);
}
现在奇怪的是,0 和 3 命中的次数大约是 1 和 2 命中次数的一半,这怎么可能?
最佳答案
查看舍入到每个整数的间隔:
|----+----|----+----|----+----|
0 1 2 3
<...>
Rounds to 0
<........>
Rounds to 1
<........>
Rounds to 2
<....>
Rounds to 3
您可以看到舍入到 0 和 3 的范围是其他范围的一半,因此如果您统一选择,则命中它们的频率就会减半。
关于java - 随机数生成器表现得很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15318968/