Unterschiedliche Zufallszahlen generieren in C#

Nachdem ich euch schon gezeigt habe, wie man eine Liste an unterschiedlichen Zufallszahlen in PHP generiert, folgt nun ein Beispiel, wie man das ganze in C# umsetzen kann. Wer sich fragt, wofür man das braucht, liest am besten noch einmal die kurze Einleitung in diesem Artikel.

//Legt den Zahlenbereich fest, aus dem die
//Zufallszahlen gewählt werden sollen
int kleinsteZahl = 1;
int groessteZahl = 10;

//Legt fest wie viele Zufallszahlen generiert werden sollen
int zufallsZahlen = 5;

//Wir legen eine List mit den Zahlen an, aus denen
//die Zufallszahlen gewählt werden sollen
List auswahlZahlen = new List();
for (int i = kleinsteZahl; i <= groessteZahl; i++)
      auswahlZahlen.Add(i);

//Wir legen eine List an, die unsere Ergebnisse
//beeinhalten soll
List ergebnisse = new List();

//Wir initialisieren den Zufallszahlengenerator
Random rand = new Random();

//Die Schleife ermittelt in jedem Durchlauf eine Zufallszahl
for (int i = 0; i < zufallsZahlen; i++)
{
        //Es wird eine Zufahlszahl generiert
        int zZahl = rand.Next(1,auswahlZahlen.Count) - 1;

        //Die generierte Zufallszahl dient als Index für die List
        //mit den Zahlen aus denen wir wählen
        ergebnisse.Add(auswahlZahlen[zZahl]);

        //Die gewählte eindeutige Zufallszahl wird aus der
        //auswahlZahlen List entfernt
        auswahlZahlen.RemoveAt(zZahl);
}

viele Grüße,
Raffi

4 Kommentare

  1. randummysays:

    Guter Beitrag!
    Ich hatte den Fehler gemacht, “Random rand = new Random();” mit in die Schleife
    reinzunehmen, bzw. wegen einer Rekursion war es erstmal nicht anders.
    Da bekommt man dann seltsamerweise nur jede Sekunde eine neue Zufallszahl.
    Also:
    Random rand = new Random();
    im Code nur einmal verwenden, und alle Zufallszahlen daraus ableiten, dann wird alles gut.

    • Eigentlich müsste es mehrmals pro Sekunde neue Zufallszahlen geben. Korrekt ist jedoch, dass du Doppelungen bekommen kannst, wenn du den Zufallszahlengenerator in jedem Lauf neu initialisierst, da dieser als Initialisierungskomponente unter anderem den aktuellen Zeitstempel verwendet. (Deshalb müsste es mehrere pro Sekunde geben, weil der Timestamp feiner auflöst als eine Sekunde. Wenn der Schleifendurchlauf jedoch sehr, sehr schnell ist, kann es zu Doppelungen kommen wie von dir beobachtet.)

  2. asdfhhgsays:

    nicht mal ein echter name -.-

Hinterlasse einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Sie dient nur dem Spamschutz.