[C#] Brauche unterschiedliche Zufallszahlen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Root-2k, 8. April 2008 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 8. April 2008
    Hi,

    ich muss für die Schule gerade ein Programm schreiben dass 10.000 Mal, oder noch öfters, eine Lottoziehung simuliert. Jetzt hab ich aber das Problem dass die Random- Klasse dem Programm nicht hinterherkommt. Wenn ich z.B. 100 Ziehnung mach, dann hab ich 2 * 7 unterschiedliche Zahlen. Also 50 Mal die eine Kombination, 50 Mal die andere.... das nur so als Beispiel.

    Jetzt hab ich zwar die Methode System.Threading.Thread.Sleep(), aber da hier der kleinste Wert 1 ms ist, ist die für meine Zwecke sinnlos. Da würde das für 10.000 Durchgänge, oder noch mehr, ja ewig dauern.

    Mein Bruder hat gemeint das könnte mit dem System.Security.Cryptography.RandomNumberGenerator gehen, aber der hat damit noch nie was gemacht... genauso wie ich. Also kA

    Hat da vielleicht jemand ne Ahnung wie ich das lösen könnte??

    Bw ist Ehrensache!!!
     
  2. 8. April 2008
    AW: [C#] Brauche unterschiedliche Zufallszahlen

    Bist du dir auch sicher, dass du die Random-Klasse richtig verwendest?
    Kannst du uns vielleicht auch deinen Code zeigen?

    - - -
    tanya
     
  3. 8. April 2008
    AW: [C#] Brauche unterschiedliche Zufallszahlen

    Google

    http://www.c-sharpcorner.com/UploadFile/rmcochran/random07172006175425PM/random.aspx
     
  4. 8. April 2008
    AW: [C#] Brauche unterschiedliche Zufallszahlen

    Code:
    public void ZieheZahlen() {
    
     Random random = new Random();
     gezogeneZahlen.Clear();
     bool einzigartig = false;
     int zufallszahl = 0;
     for (int i = 0; i < 7; i++) {
     do {
     [B]System.Threading.Thread.Sleep(1);[/B]
     
     zufallszahl = random.Next(1, 50);
     einzigartig = true;
    
     foreach (int tmpZahl in gezogeneZahlen) {
     if (tmpZahl == zufallszahl) {
     einzigartig = false;
     }
     }
    
     } while (einzigartig == false);
     gezogeneZahlen.Add(zufallszahl);
     Console.Write(zufallszahl + " ");
     }
     }
    
    So würde das eben alles funktionieren... nur viel zu langsam!

    Edit:
    @styxx: Ich hab nicht vor die System.Random zu überschreiben. Von sowas hab ich auch absolut kein Plan.
    Bin noch mehr oder weniger Anfänger.

    Gibt es da nichts passendes?
     
  5. 8. April 2008
    AW: [C#] Brauche unterschiedliche Zufallszahlen

    Du musst die Random-Klasse mit einem "seed" füttern, damit die Zahlen unterschiedlich 'rauskommen':

    Code:
    public static List<int> ZieheZahlen()
     {
     List<int> gezogeneZahlen = new List<int>();
     
     // Noch ein wenig warten, denn die DateTime.Now.Ticks werden
     // nicht so schnell inkrementiert wie der Durchlauf der Funktion sein kann.
     System.Threading.Thread.Sleep(100);
    
     // den Zufallsgenerator muss man immer mit einem anderen Startwert starten,
     // ansonsten fängt er immer bei der gleichen Zahl an.
     Random random = new Random((int)DateTime.Now.Ticks);
    
     gezogeneZahlen.Clear();
     bool einzigartig = false;
     int zufallszahl = 0;
     for (int i = 0; i < 20; i++)
     {
     
     do
     {
     zufallszahl = random.Next(1, 50);
     einzigartig = true;
    
     foreach (int tmpZahl in gezogeneZahlen)
     {
     if (tmpZahl == zufallszahl)
     {
     einzigartig = false;
     }
     }
    
     } while (einzigartig == false);
     gezogeneZahlen.Add(zufallszahl);
     //Console.Write(zufallszahl + " ");
     }
     return gezogeneZahlen;
     }
     
  6. 8. April 2008
    AW: [C#] Brauche unterschiedliche Zufallszahlen

    Wenn es dir darauf ankommt, dass dein Programm schnell ablaufen soll, dann erstelle doch zu Programmbeginn eine Random-Instanz und gib diese immer der Funktion mit dazu.

    Code:
     static void Main(string[] args)
     {
     List<int> liste ;
    
     Random random = new Random((int)DateTime.Now.Ticks);
    
     for (int i = 0; i < 100000; i++)
     {
     liste = ZieheZahlen(random);
     }
    
     }
    
     public static List<int> ZieheZahlen(Random random)
     {
     List<int> gezogeneZahlen = new List<int>();
     
     /* (place your code here) */
     
     return gezogeneZahlen;
     }
    
     }
    
     
  7. 10. April 2008
    AW: [C#] Brauche unterschiedliche Zufallszahlen

    Danke für die Hilfe!!
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.