Java-Zufallszahlengenerator: Warum immer die gleiche Ausgabe mit Set Seed?
In Java, wenn die Random-Klasse zum Generieren von Zufallszahlen verwendet wird , kommt es nicht selten vor, dass das Setzen eines Startwerts stets die gleiche Ausgabe liefert. Lassen Sie uns das Problem genauer untersuchen und eine effektive Lösung finden.
Betrachten Sie den folgenden Codeausschnitt:
public int random(int i){ Random randnum = new Random(); randnum.setSeed(123456789); return randnum.nextInt(i); }
Bei mehrmaligem Aufruf aus einer anderen Klasse sollte diese Methode idealerweise unterschiedliche Zufallszahlen liefern. Beim Aufruf mit „numbers.random(10)“ wird jedoch immer das gleiche Ergebnis zurückgegeben, z. B. „5“.
Der Grund für dieses Verhalten liegt in der Erstellung einer neuen Random-Instanz innerhalb der Random-Methode. Jede neue Instanz verwendet einen anderen Seed-Generator, was zu einer vorhersehbaren Zahlenfolge führt. Um dies zu beheben, muss die Random-Instanz in der gesamten Klasse gemeinsam genutzt werden.
public class Numbers { Random randnum; public Numbers() { randnum = new Random(); randnum.setSeed(123456789); } public int random(int i){ return randnum.nextInt(i); } }
Mit der gemeinsam genutzten Random-Instanz generieren nun mehrere Aufrufe der Random-Methode echte Zufallszahlen, selbst mit einem festgelegten Startwert . Der Startwert dient als Ausgangspunkt für den Zufallszahlengenerator und stellt die Konsistenz über mehrere Durchläufe hinweg sicher, während gleichzeitig das beabsichtigte Element der Zufälligkeit erhalten bleibt.
Das obige ist der detaillierte Inhalt vonWarum erzeugt mein Java-Zufallszahlengenerator immer die gleiche Ausgabe, wenn ich einen Startwert festlege?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!