我只是出于好奇而编写了这个简单的代码,并遇到了 Java Random 类中 nextInt() 方法的一些我不太了解的行为。任何人都可以帮我弄清楚吗?
该程序模拟了一个简单的硬币翻转。因此,据我所知,对于小于和大于 49 的数字,nextInt(101) 的概率应该相等。
但是只要我增加迭代次数,余额就会趋于正数,例如在 100,000 次迭代之后,我没有得到负数。为什么会发生这种情况?
public static void main(String[] args) {
int balance = 0;
for (int i = 0; i < 100000; i++) {
Random random = new Random();
int result = random.nextInt(101);
if (result > 49) {
balance++;
} else {
balance--;
}
}
System.out.println("Player's balance = " + balance);
}
Run Code Online (Sandbox Code Playgroud)
您调用int result = random.nextInt(101)
which 在 [0,100] 中创建均匀分布的整数,它可以取 101 个不同的值。如果您检查,if (result > 49)
那么您有 51 个可能的值 ([50,100]),而在其他情况下,您只有 50 个值 ([0,49])。因此,结果更有可能在上半部分。要修复它,您可以这样做int result = random.nextInt(100)
。