固定シードを使用した Java 乱数ジェネレーター
質問:
Java での設定時乱数ジェネレーターのシードですが、別のクラスからメソッドを呼び出すと常に同じ数値が返されるのはなぜですか?
コード:
public class Numbers { public int random(int i) { Random randnum = new Random(); randnum.setSeed(123456789); return randnum.nextInt(i); } }
呼び出し時numbers.random(10) を複数回実行すると、一貫して同じ値が出力されます。シードを設定する要件を維持しながら、異なる乱数を生成するようにコードを変更するにはどうすればよいですか?
回答:
異なる乱数が生成されるようにするには、ランダム インスタンスは、メソッド呼び出しごとに再作成されるのではなく、クラス全体で共有される必要があります。これは、次の変更を通じて実現できます。
public class Numbers { private Random randnum; // Declare the Random instance as a class variable public Numbers() { randnum = new Random(); randnum.setSeed(123456789); } public int random(int i) { return randnum.nextInt(i); } }
クラス コンストラクターで randnum インスタンスを初期化し、クラスのメソッドを通じてアクセスできるようにすることで、クラス全体で同じ Random オブジェクトが使用されるようになります。メソッド呼び出しごとに異なる乱数が生成されます。
以上がJava 乱数ジェネレーターが別のクラスから呼び出されたときに同じ数値を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。