Heim >Java >javaLernprogramm >Warum führt das Festlegen des Startwerts im Zufallszahlengenerator von Java zu wiederholten Ausgaben?

Warum führt das Festlegen des Startwerts im Zufallszahlengenerator von Java zu wiederholten Ausgaben?

DDD
DDDOriginal
2024-11-12 19:04:02443Durchsuche

Why Does Setting the Seed in Java's Random Number Generator Result in Repeated Outputs?

Lösung des Problems der sich wiederholenden Zufallszahlengenerierung in Java mit Set Seed

Problembeschreibung:

Bei der Implementierung eines Zufallszahlengenerators können Entwickler auf eine Situation stoßen, in der der Aufruf der Zufallszahlenmethode trotz der Festlegung des Startwerts kontinuierlich die gleiche Ausgabe generiert.

Codebeispiel:

Betrachten Sie den folgenden Codeausschnitt:

class Numbers {
    public int random(int i) {
        Random randnum = new Random();
        randnum.setSeed(123456789);
        return randnum.nextInt(i);
    }
}

Beim mehrmaligen Aufruf von „numbers.random(10)“ wird dauerhaft eine identische Zahl, z. B. 5, anstelle unterschiedlicher Ausgaben zurückgegeben.

Lösung:

Um die Generierung eindeutiger Zufallszahlen mit einem vordefinierten Startwert sicherzustellen, muss die Random()-Instanz in der gesamten Klasse gemeinsam genutzt werden. Dies kann durch die folgende Codeänderung erreicht werden:

class Numbers {
    Random randnum;

    public Numbers() {
        randnum = new Random();
        randnum.setSeed(123456789);
    }

    public int random(int i) {
        return randnum.nextInt(i);
    }
}

Durch die Initialisierung der Randnum-Instanz im Klassenkonstruktor wird sie zu einer gemeinsam genutzten Ressource, auf die alle Methoden innerhalb der Klasse zugreifen können. Dadurch wird sichergestellt, dass der Startwert nur einmal gesetzt wird und nachfolgende Aufrufe der random()-Methode unterschiedliche Zufallszahlen generieren.

Das obige ist der detaillierte Inhalt vonWarum führt das Festlegen des Startwerts im Zufallszahlengenerator von Java zu wiederholten Ausgaben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn