java中的随机gen方法似乎并不随机

时间:2012-11-11 17:53:10

标签: java random

  

可能重复:
  True random generation in Java
  Java random always returns the same number when I set the seed?

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

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

这不是那个顺序的alwasy。但它几乎没有接近50/50

更新

我不是在考虑五十五,但似乎如果首先选择“Aa”,那么它将接下来大约3次,但如果首先选择Bb,则接下来的三次选择它同样。

3 个答案:

答案 0 :(得分: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()时得到了相同的结果,而不仅仅是一次 - 尽管这样做并不是一个好主意。

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:-1)

您需要为随机类添加种子。通常它是一个时间戳。所以尝试像

这样的东西
Random generator = new Random(System.currentTimeMillis);