シードを設定した Java での反復乱数生成の問題の解決
問題の説明:
乱数ジェネレーターを実装すると、開発者は、シードを設定しているにもかかわらず、乱数メソッドを呼び出すと同じ出力が継続的に生成される状況に遭遇する可能性があります。
コード例:
次のコード スニペットを考えてみましょう:
class Numbers { public int random(int i) { Random randnum = new Random(); randnum.setSeed(123456789); return randnum.nextInt(i); } }
numbers.random(10) を複数回呼び出すと、異なる出力ではなく、同じ数値 (5 など) が永続的に返されます。
解決策:
事前定義されたシードを使用して一意の乱数を確実に生成するには、Random() インスタンスをクラス全体で共有する必要があります。これは、次のコード変更によって実現できます。
class Numbers { Random randnum; public Numbers() { randnum = new Random(); randnum.setSeed(123456789); } public int random(int i) { return randnum.nextInt(i); } }
クラス コンストラクター内で randnum インスタンスを初期化すると、そのインスタンスはクラス内のすべてのメソッドにアクセスできる共有リソースになります。これにより、シードが 1 回だけ設定され、その後のrandom() メソッドの呼び出しで異なる乱数が生成されることが保証されます。
以上がJava の乱数ジェネレーターでシードを設定すると出力が繰り返されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。