2

可能重复: Java 中的
真正随机生成
当我设置种子时,Java 随机总是返回相同的数字?

我在我的一个程序中运行这段代码。

public String[] gen_phase_zero() {
        Random generator = new Random();
        int r = generator.nextInt(2);
        if (r == 1) {
            String big = "A";
            String small = "a";
            return new String[] { big, small };
        } else {
            String big = "B";
            String small = "b";
            return new String[] { big, small };
        }
    }

如果我运行几次,我的输出是这样的。

Aa Aa Aa Aa Bb Aa Aa Aa Bb

它并不总是按这个顺序。但它几乎从来没有接近 50/50

更新:

我不期待五十五十,但似乎如果先选择“Aa”,那么接下来会多选 3 次左右,但如果先选择 Bb,那么接下来也会选择 3 次。

4

3 回答 3

5

好吧,对我来说它看起来并不太糟糕。让我们创建一个更具统计意义的测试:

import java.util.Random;

public class Test {
    public static void main(String[] args) throws Exception {

        Random rng = new Random();
        int total = 0;
        for (int i = 0; i < 1000000; i++) {
            total += rng.nextInt(2);
        }
        System.out.println("Total: " + total);
    }
}

5 次运行的示例输出:

Total: 501184
Total: 499740
Total: 500116
Total: 500374
Total: 500413

在我看来并没有太大偏见...

在循环内部调用时,我得到了相同的结果,new Random()而不是只调用一次——尽管这样做不是一个好主意。

于 2012-11-11T17:56:24.037 回答
1

这样做 10000 次,它将接近 50:50。

然后掷硬币 9 次 - 结果可能类似于 random.nextInt() 给你的结果。

这里的关键是统计上显着的数据量。

顺便说一句,使用random.nextBoolean()

于 2012-11-11T17:56:09.733 回答
-1

您需要在随机类中添加一个种子。通常它是一个时间戳。所以尝试类似的东西

Random generator = new Random(System.currentTimeMillis);
于 2012-11-11T17:58:46.297 回答