を播種する場合は、次のコードは、同一の種を持つ2つのランダムオブジェクトを作成する必要があります出力に示すようにSystem.currentTimeMillis()
は、2つのオブジェクトを作成する前と後に変化しなかったので、奇妙な行動のJavaランダム
System.out.println("System time before: " + System.currentTimeMillis());
Random r1 = new Random();
Random r2 = new Random(System.currentTimeMillis());
System.out.println("System time after: " + System.currentTimeMillis());
System.out.println("r1: " + r1.nextInt());
System.out.println("r2: " + r2.nextInt());
を種子が同一である必要があります:ドキュメントから
System time before: 1331889186449
System time after: 1331889186449
r1: -1836225474
r2: 2070673752
、引数なしコンストラクタは、単純です:
public Random() { this(System.currentTimeMillis()); }
それで何ができますか?同じ種子を持つべきときに2つの発電機が異なる出力を返す理由を誰でも説明できますか?
にヘッダに探し ' + は'メソッドのソースを表示します。 –
"System.currentTimeMillis()は2つのオブジェクトの作成前後で変更されていないため、シードは同じである必要があります" - それが本当であるという保証はありません。 – Jesper