Heim >Backend-Entwicklung >C++ >Warum erzeugt mein C#-Zufallszahlengenerator dieselbe Sequenz über mehrere Objekte hinweg?

Warum erzeugt mein C#-Zufallszahlengenerator dieselbe Sequenz über mehrere Objekte hinweg?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-24 23:26:09330Durchsuche

Why Does My C# Random Number Generator Produce the Same Sequence Across Multiple Objects?

Zufallszahlengenerierung in C# verstehen und Sequenzwiederholungen vermeiden

Dieser Artikel befasst sich mit einem häufigen Problem in C#: Mehrere Instanzen der Random-Klasse erzeugen identische Zufallszahlensequenzen. Die Random-Klasse ist zwar für die Generierung scheinbar unvorhersehbarer Zahlen konzipiert, verlässt sich jedoch auf einen Startwert für ihren internen Algorithmus. Wenn mehrere Random-Objekte schnell hintereinander erstellt werden, erhalten sie häufig ähnliche Startwerte (häufig basierend auf der Systemuhr), was zu identischen Ausgabesequenzen führt.

Das Problem: Mehrere Random Instanzen

Das Erstellen einer neuen Random Instanz für jedes Objekt, das Zufallszahlen benötigt, ist die Hauptursache. Da die Startwerte nahe beieinander liegen, sind die generierten Sequenzen nahezu identisch.

Die Lösung: Eine einzelne, gemeinsam genutzte Random Instanz

Die Lösung ist unkompliziert: Erstellen Sie eine einzelne Random Instanz und teilen Sie sie mit allen Objekten, die Zufallszahlen erfordern. Dadurch wird sichergestellt, dass jedes Objekt aus der gleichen, sich entwickelnden Sequenz stammt, wodurch das Wiederholungsproblem vermieden wird.

So implementieren Sie dies mit einem statischen Mitglied:

<code class="language-csharp">class A
{
    private static readonly Random rnd = new Random(); // Static, read-only instance

    public void Count()
    {
        int r1 = rnd.Next(-1, 1);
        int r2 = rnd.Next(-1, 1);
    }
}

class B
{
    List<A> listOfA = new List<A>();

    public void DoSomething()
    {
        foreach (A aClass in listOfA)
        {
            aClass.Count();
        }
    }
}</code>

Durch die Verwendung eines static readonly-Felds stellen wir sicher, dass eine einzelne Random-Instanz einmal erstellt und von allen Instanzen der Klasse A gemeinsam genutzt wird. Dies eliminiert das Risiko doppelter Startwerte und garantiert eindeutige Zufallszahlensequenzen für jeden Aufruf von rnd.Next(). Dieser Ansatz erzeugt wirklich zufällige und unterschiedliche Sequenzen für jedes AObjekt.

Das obige ist der detaillierte Inhalt vonWarum erzeugt mein C#-Zufallszahlengenerator dieselbe Sequenz über mehrere Objekte hinweg?. 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