Heim  >  Artikel  >  Java  >  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?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-06 14:21:03943Durchsuche

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

Java-Zufallszahlengenerierung: Warum gibt das Festlegen 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.

Verstehen der Random-Klasse und der Seed-Initialisierung

Die Java-Random-Klasse wurde entwickelt, um Pseudozufallszahlen zu generieren. 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 zur Initialisierung des internen Zustands des Zufallszahlengenerators verwendet wird. Dieser Status bestimmt die Reihenfolge der generierten Zahlen.

Problem: Teilen 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 die Der Startwert wird im Konstruktor festgelegt, um sicherzustellen, dass der Startwert nur einmal initialisiert wird, wenn das Klassenobjekt erstellt wird.

Durch diese Änderungen erhalten Sie nun unterschiedliche Zufallszahlen, wenn Sie random() von verschiedenen Orten aus aufrufen Teile Ihres Programms unter Berücksichtigung des angegebenen Startwerts.

Das obige ist der detaillierte Inhalt vonWarum gibt das Setzen des Startwerts in der Zufallsklasse von Java dieselbe Zahl zurück?. 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