Java Random.nextInt() 行为

Mic*_*ael 0 java random

我只是出于好奇而编写了这个简单的代码,并遇到了 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)

Mic*_*utz 6

您调用int result = random.nextInt(101)which 在 [0,100] 中创建均匀分布的整数,它可以取 101 个不同的值。如果您检查,if (result > 49)那么您有 51 个可能的值 ([50,100]),而在其他情况下,您只有 50 个值 ([0,49])。因此,结果更有可能在上半部分。要修复它,您可以这样做int result = random.nextInt(100)

  • 更好的是,只需使用“random.nextBoolean()” (3认同)