Obwohl der Startwert der Random-Klasse auf einen bestimmten Wert gesetzt ist, ist der Zufallszahlengenerator gibt immer die gleiche Nummer zurück. Lassen Sie uns untersuchen, was dieses Problem verursachen könnte.
Die Java-Random-Klasse ist für die Generierung von Pseudozufallszahlen konzipiert. Standardmäßig verwendet es seine interne Uhr als Startwert, wodurch eine relativ vorhersehbare Zahlenfolge generiert wird. Um die Sequenz anzupassen, können Sie mit der Methode setSeed() explizit einen Startwert festlegen.
Der Startwert ist ein numerischer Wert, der zum Initialisieren des internen Status des Zufallszahlengenerators verwendet wird. Dieser Status bestimmt die Reihenfolge der generierten Zahlen.
Im bereitgestellten Code erstellen Sie eine neue Instanz von Random innerhalb der random()-Methode. Dies bedeutet, dass jedes Mal, wenn Sie random() aufrufen, ein neuer Startwert festgelegt wird, der den zuvor festgelegten Startwert effektiv überschreibt.
Um dieses Problem zu beheben, müssen Sie die Random-Instanz für die gesamte Klasse freigeben. Durch das Erstellen einer einzelnen Instanz und das einmalige Festlegen des Startwerts bei der Initialisierung der Klasse stellen Sie sicher, dass konsistent dieselbe Zahlenfolge generiert wird.
Der folgende aktualisierte Code behebt das Problem:
public class Numbers { private Random randnum; public Numbers() { randnum = new Random(); randnum.setSeed(123456789); } public int random(int i) { return randnum.nextInt(i); } }
In diesem aktualisierten Code:
Durch diese Änderungen erhalten Sie nun unterschiedliche Zufallszahlen beim Aufrufen von random() aus verschiedenen Teilen Ihres Programms unter Berücksichtigung des angegebenen Startwerts.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3