„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum gibt das Setzen des Startwerts in der Zufallsklasse von Java dieselbe Zahl zurück?

Warum gibt das Setzen des Startwerts in der Zufallsklasse von Java dieselbe Zahl zurück?

Veröffentlicht am 09.11.2024
Durchsuche:987

Why Does Setting the Seed in Java's Random Class Return the Same Number?

Java-Zufallszahlengenerierung: Warum gibt das Setzen des Startwerts dieselbe Zahl zurück?

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 Random-Klasse und die Seed-Initialisierung verstehen

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.

Problem: Gemeinsame Nutzung der Random-Instanz

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.

Aktualisierter Code

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:

  1. Ein privates Feld namens randnum wird deklariert, um die gemeinsam genutzte Random-Instanz darzustellen.
  2. Die Random-Instanz wird erstellt und der Startwert ist Wird im Konstruktor festgelegt und stellt sicher, dass der Startwert nur einmal initialisiert wird, wenn das Klassenobjekt erstellt wird.

Durch diese Änderungen erhalten Sie nun unterschiedliche Zufallszahlen beim Aufrufen von random() aus verschiedenen Teilen Ihres Programms unter Berücksichtigung des angegebenen Startwerts.

Neuestes Tutorial Mehr>

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