Zufallszahlen in C# generieren: Vom Anfänger zum Profi (Top-Stack-Overflow-Frage gelöst)

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Wie generiert man eine ganze Zufallszahl in C#? Ein für alle Mal erklärt

\n

Die Frage nach der Generierung von Zufallszahlen ist eine der beliebtesten auf Stack Overflow. Was könnte einfacher sein? Doch in der Praxis machen selbst erfahrene C#-Entwickler klassische Fehler: Sie erhalten bei jedem Durchlauf dieselben Werte, stoßen auf nicht-zufällige Sequenzen oder vergessen die Thread-Sicherheit. Heute klären wir ein für alle Mal, wie man ganze Zufallszahlen in C# richtig generiert, und beantworten alle „Warum“-Fragen aus dem Top-Thread auf Stack Overflow.

\n\n

Dieser Artikel ist Ihre Chance, nicht länger Code aus dem Internet zu kopieren, sondern zu verstehen, was unter der Haube von System.Random wirklich passiert. Los geht's!

\n\n

Warum bekommen Anfänger immer wieder dieselbe Zahl?

\n

Die häufigste Frage: „Ich erstelle Random und bekomme immer dieselbe Zahl!“. Schauen wir uns den typischen Code-Fehler an:

\n\n
// ❌ SCHLECHTES BEISPIEL\nfor (int i = 0; i < 5; i++)\n{\n    Random rnd = new Random();\n    Console.WriteLine(rnd.Next(1, 100));\n}\n
\n\n

Was gibt dieser Code aus? Mit 99% Wahrscheinlichkeit fünf identische Zahlen. Warum? Weil Random die Systemuhr zur Initialisierung (Seed) verwendet. Wenn Sie mehrere Random-Instanzen hintereinander erstellen, erhalten sie denselben Seed und erzeugen daher dieselbe Sequenz.

\n\n

Die richtige Lösung: Eine einzige Random-Instanz erstellen und mehrfach verwenden:

\n\n
// ✅ RICHTIGES BEISPIEL\nRandom rnd = new Random();\nfor (int i = 0; i < 5; i++)\n{\n    Console.WriteLine(rnd.Next(1, 100));\n}\n
\n\n

Jede Zahl ist jetzt anders. Die einfache Regel: Ein Random pro Ausführungsthread.

\n\n

Random.Next(): Drei Wege zu einer ganzen Zufallszahl

\n

Die Klasse System.Random bietet drei Überladungen der Methode Next(). Sehen wir uns jede mit Beispielen an:

\n\n

1. Random.Next() – ohne Parameter

\n

Gibt eine nicht-negative ganze Zahl im Bereich von 0 bis Int32.MaxValue - 1 zurück. Also von 0 bis 2.147.483.646.

\n
Random rnd = new Random();\nint anyNumber = rnd.Next();\nConsole.WriteLine(anyNumber); // Zum Beispiel: 1789034215\n
\n\n

2. Random.Next(Int32) – mit Obergrenze

\n

Gibt eine Zahl von 0 (inklusive) bis zur angegebenen Obergrenze (exklusive) zurück.

\n
int dice = rnd.Next(7); // 0, 1, 2, 3, 4, 5 oder 6\nConsole.WriteLine(dice);\n
\n\n

3. Random.Next(Int32, Int32) – Bereich [min, max)

\n

Die beliebteste Variante zur Generierung einer ganzen Zufallszahl in C# in einem bestimmten Bereich.

\n
// Zufallszahl von 1 bis 100 (inklusive)\nint score = rnd.Next(1, 101);\nConsole.WriteLine(score);\n
\n\n

Wichtig zu merken: Die Obergrenze ist exklusive. Um eine Zahl von 1 bis 6 (wie bei einem Würfel) zu erhalten, schreiben Sie Next(1, 7).

\n\n

Die Top-3-Fehler bei der Arbeit mit Random in C#

\n

Basierend auf echten Fragen von Stack Overflow C# random, hier die häufigsten Fallstricke:

\n\n
    \n
  • Fehler Nr. 1: Neues Random in einer Schleife erstellen. Das haben wir bereits behandelt – es führt zu identischen Zahlen. Lösung: new Random() außerhalb der Schleife platzieren.
  • \n
  • Fehler Nr. 2: Random ist nicht threadsicher. Wenn mehrere Threads eine Random-Instanz ohne Synchronisation verwenden, kann es zu Abstürzen oder Nullwerten kommen. Verwenden Sie lock oder ThreadLocal<Random>.
  • \n
  • Fehler Nr. 3: Random für Passwörter oder Tokens verwenden. System.Random ist ein Pseudozufallsgenerator. Er ist vorhersagbar! Für Sicherheitszwecke benötigen Sie System.Security.Cryptography.RandomNumberGenerator.
  • \n
\n\n

Wie generiert man kryptografisch sichere Zufallszahlen?

Blogs

Buchempfehlungen