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
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.)
nicht mal ein echter name -.-
haallllllooooo