- PR -

乱数発生について

1
投稿者投稿内容
ぼぼ
常連さん
会議室デビュー日: 2005/05/29
投稿数: 45
投稿日時: 2006-05-19 00:14
こんにちは、またまた失礼します。

Random ran = new Random(123); // 初期化
String str = "";
for (int i = 0; i < 30; i++) {
str = str + Integer.toString(ran.nextInt(9));
}
System.out.println(str);

こんなソースで30桁の数字の乱数を生成しています。
ただどうやら同じ30桁ばかり生成しているようです。

30桁作るまでは乱数らしく散らばった数値になるのですが、
どこが悪いのでしょうか?

よろしくお願いします。
さいくろう
大ベテラン
会議室デビュー日: 2005/11/19
投稿数: 170
お住まい・勤務地: 川崎市
投稿日時: 2006-05-19 00:33
APIくらいちゃんと読もうね。
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/Random.html
引用:

・・・省略・・・

2 つの Random インスタンスが同じシードで生成され、それぞれに対して同じメソッド呼び出しのシーケンスが生成される場合は、同じ番号のシーケンスが生成され返されます。

・・・省略・・・

コンストラクタの詳細

public Random()

新しい乱数ジェネレータを作成します。シードは現在時刻をもとに初期化されます。

public Random() { this(System.currentTimeMillis()); }

同じミリ秒内に作成された 2 つの Random オブジェクトには、同一シーケンスの乱数があります。


というわけで、Random()に引数なんか指定しなくてもよろし。
ぼぼ
常連さん
会議室デビュー日: 2005/05/29
投稿数: 45
投稿日時: 2006-05-19 01:36
さいくろうさん、ありがとうございます。

うまく変わりました。
乱数のロジック自体初めてでどうやってるのかAPI読んでも理解できませんでした。

ありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)