質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

1796閲覧

乱数

otsumu

総合スコア13

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2015/11/18 05:54

乱数についてお聞きしたいです。

Random rnd = new Random();
int ran = rnd.nextInt(10);

これは0~9のどれかを取り出すというのはわかったのですが、

Random rnd = new Random(seed);
これはどういう意味なのでしょうか?
seedの意味も一緒に教えていただきたいです!
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

乱数と言っても、サイコロを振るように完全にランダムに数値を決めているわけではなく、
計算によって数値を算出しています。そのための計算の入口となる値がseed(シード値)です。
シード値が同じであれば発生する乱数は数値、順番ともに全く同じになります。

投稿2015/11/18 06:02

swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otsumu

2015/11/18 06:10

回答ありがとうございます! Random rnd = new Random(); int ran = rnd.nextInt(10); よりも Random rnd = new Random(seed); int ran = rnd.nextInt(10); の方がよりランダム性が高いということでしょうか?
swordone

2015/11/18 06:15

何をもって「ランダム性」とするかはわかりませんが、乱数の均一性という点ではどちらも一緒です。ただし、シード値を指定すると、同じシード値を使った場合に、値とその出る順番は完全に一致します。
guest

0

ベストアンサー

一般的に、コンピューターで発生させる乱数は、同じ条件で同じパターンの乱数数列になります。
このため、毎回同じ乱数では都合が悪い場合に、最初の種(seed) を変えて、別のパターンの乱数列を作り出すための数値です。

反対に、あえて同一パターンの乱数列が欲しい時は同じ seed値を使用します。

java で seed を指定しない場合の乱数列は… (どうなるのでしょうね?)

投稿2015/11/18 05:58

編集2015/11/18 06:11
T.Kanno

総合スコア915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otsumu

2015/11/18 06:15

回答ありがとうございます! Random rnd = new Random(1); int ran = rnd.nextInt(10); と Random rnd = new Random(2); int ran = rnd.nextInt(10); ではなにか違いがあるということでしょうか?
KiyoshiMotoki

2015/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.Kanno

2015/11/18 06:23

seed を変えると、違うパターンの乱数列になるだけですね。 javaの乱数は48bit のシードを使っているらしいので、単純に約281兆個あるパターンの内の別の2パターンを選択していると言うだけです。
T.Kanno

2015/11/18 06:27

KiyoshiMotoki様 ありがとうございます、勉強になりました。m(_._)m デバッグや運用などの都合で、完全に同一の乱数がほしくて同一の seed 値を使う以外は、あえて指定する必要がないみたいですね。
KiyoshiMotoki

2015/11/18 06:31

T.Kanno様、 > ... あえて指定する必要がないみたいですね。 おっしゃる通りですね。 私も勉強させていただきました。
guest

0

すみません間違えて投稿してしまいました

投稿2015/11/18 07:08

編集2015/11/18 07:09
hasisi

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問