Java 乱数ジェネレーター: シードを設定すると常に同じ出力になるのはなぜですか?
Java で乱数の生成に Random クラスを利用する場合、シードを設定すると常に同じ出力が得られるという状況に遭遇することは珍しいことではありません。この問題を詳しく調べて、効果的な解決策を探ってみましょう。
次のコード スニペットを考えてみましょう:
public int random(int i){ Random randnum = new Random(); randnum.setSeed(123456789); return randnum.nextInt(i); }
このメソッドは、別のクラスから複数回呼び出された場合、理想的には個別の乱数を提供する必要があります。ただし、numbers.random(10) で呼び出すと、"5" など、一貫して同じ結果が返されます。
この動作の原因は、random メソッド内で新しい Random インスタンスを作成することにあります。新しいインスタンスはそれぞれ異なるシード ジェネレーターを使用するため、予測可能な一連の数値が得られます。これを修正するには、Random インスタンスをクラス全体で共有する必要があります。
public class Numbers { Random randnum; public Numbers() { randnum = new Random(); randnum.setSeed(123456789); } public int random(int i){ return randnum.nextInt(i); } }
現在、共有 Random インスタンスを使用すると、シードが設定されている場合でも、random メソッドを複数回呼び出すと真の乱数が生成されます。 。シードは乱数ジェネレーターの開始点として機能し、意図した乱数要素を維持しながら複数の実行にわたる一貫性を確保します。
以上がシードを設定すると Java 乱数ジェネレーターが常に同じ出力を生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。