ホームページ  >  記事  >  Java  >  Java 乱数ジェネレーターが別のクラスから呼び出されたときに同じ数値を返すのはなぜですか?

Java 乱数ジェネレーターが別のクラスから呼び出されたときに同じ数値を返すのはなぜですか?

DDD
DDDオリジナル
2024-11-07 04:54:02880ブラウズ

Why does my Java random number generator return the same number when called from another class?

固定シードを使用した 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。