首页 > 解决方案 > Java Random.nextInt() 行为

问题描述

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

标签: javarandom

解决方案


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


推荐阅读