シードを設定すると Java 乱数ジェネレーターが常に同じ出力を生成するのはなぜですか?

Barbara Streisand
リリース: 2024-11-07 11:58:02
オリジナル
865 人が閲覧しました

Why Does My Java Random Number Generator Always Produce the Same Output When I Set a Seed?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート