2

重複の可能性:
Javaでの真のランダム生成
Javaランダムは、シードを設定すると常に同じ数値を返しますか?

このコードを自分のプログラムの1つで実行します。

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

私には大きく偏っているようには見えません...

ループ内を1回だけではなく呼び出しても同じ結果が得られました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 に答える