otsumu2015/11/18 06:10回答ありがとうございます! Random rnd = new Random(); int ran = rnd.nextInt(10); よりも Random rnd = new Random(seed); int ran = rnd.nextInt(10); の方がよりランダム性が高いということでしょうか?
swordone2015/11/18 06:15何をもって「ランダム性」とするかはわかりませんが、乱数の均一性という点ではどちらも一緒です。ただし、シード値を指定すると、同じシード値を使った場合に、値とその出る順番は完全に一致します。
otsumu2015/11/18 06:15回答ありがとうございます! Random rnd = new Random(1); int ran = rnd.nextInt(10); と Random rnd = new Random(2); int ran = rnd.nextInt(10); ではなにか違いがあるということでしょうか?
KiyoshiMotoki2015/11/18 06:21 編集T.Kanno様、横から失礼します。 > java で seed を指定しない場合の乱数列は… (どうなるのでしょうね?) JDK1.6と1.8のソースコードを見ると、いずれもSystem.nanoTime()をもとにシードを生成しているようです。 ■JDK1.6 下記リンクの77, 78行目が、該当箇所です。 http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b27/java/util/Random.java?av=f ■JDK1.8 下記リンクの104〜106行目です。 http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/Random.java?av=f これにより、引数seedを指定しなくてもインスタンスごとに異なる乱数列を使用できるようになっているようですね。
T.Kanno2015/11/18 06:23seed を変えると、違うパターンの乱数列になるだけですね。 javaの乱数は48bit のシードを使っているらしいので、単純に約281兆個あるパターンの内の別の2パターンを選択していると言うだけです。
T.Kanno2015/11/18 06:27KiyoshiMotoki様 ありがとうございます、勉強になりました。m(_._)m デバッグや運用などの都合で、完全に同一の乱数がほしくて同一の seed 値を使う以外は、あえて指定する必要がないみたいですね。
2015/11/18 06:10
2015/11/18 06:15