GELÖST random in C# nicht zufällig genug

Diskutiere random in C# nicht zufällig genug im Programmierung Forum im Bereich Software Forum; Ich programmiere gerade eine Funktion die mir mehrere 6 seitige Würfel simuliert, das Programm funktioniert, technisch gesehen. aber die...

spacelord

Threadstarter
Dabei seit
26.06.2006
Beiträge
887
Alter
53
Ort
Nürnberg
Ich programmiere gerade eine Funktion die mir mehrere 6 seitige Würfel simuliert, das Programm funktioniert, technisch gesehen.
aber die ergebnisse sind unpraktisch :
bei 8 Würfel kriege ich zurück :

1,1,1,1,1,1,1,1 oder 1,1,1,1,2,2,2,2 oder 3,3,4,4,4,4,4,4 usw

von Zufall kann also nicht die Rede sein.
Wie kann ich den Code verbessern ?
Hier der Ausschnitt

for (int i = 0; i < NumbDice; i++)
{
// Hier die Generierung der Würfel
Random rnd = new Random();
dice = rnd.Next(1, 7);

textBox2.Text = textBox2.Text + Convert.ToString(dice) +(" ") ;

// Hier der Vergleich ob die Zahl 5 oder 6 ist ( der geht )
if (dice > 4)
{
success = success +1;
textBox1.Text = Convert.ToString(success);
}

}

:blink
 

HWFlo

Dabei seit
04.09.2005
Beiträge
5.271
Alter
33
Versuchs mal mit der Methode unter Math.*
Bei deinem Weg müsste man glaube ich erst noch ne ordentliche Initialisierung machen.
 

Schard

Dabei seit
13.04.2007
Beiträge
720
Ort
Hannover
Wahrscheinlich ist die FOR Schleife für den Random Algorithmus zu schnell.
Der geht ja bekanntlich nach der Systemzeit. Um das zu beheben könntest du iterativ oder rekursiv den letzten (vorherigen) Randomwert in die Berechnung des neuen Randomwertes einbeziehen, oder eine ganz neue Random Funktion schreiben.
Außerdem gibt
Code:
dice = rnd.Next(1, 7);
IMHO Die Zahlen 1-7 aus.

MfG,
Schard
 

spacelord

Threadstarter
Dabei seit
26.06.2006
Beiträge
887
Alter
53
Ort
Nürnberg
der seed muss Ausserhalb statt finden :

Random rnd = new Random();
for (int i = 0; i < NumbDice; i++)
{
dice = rnd.Next(1, 7);
textBox2.Text = textBox2.Text + Convert.ToString(dice) +(" ") ;
if (dice > 4)
{
success = success +1;
textBox1.Text = Convert.ToString(success);
}


}


jetzt geht es besser.
 

DiableNoir

Dabei seit
18.01.2004
Beiträge
6.069
Ja, das ist natürlich der Fehler gewesen. ;)

Zufallsgeneratoren sind auch nur Algorithmen und können Zufall nur "simulieren". Das Problem dabei ist, dass man eigentlich immer die selben Muster erzeugt, was aber bei guten Algorithmen erst bei sehr vielen Zufallszahlen für Wiederholungen im Muster sorgt.

Der Grund warum die Klasse Random dir diese Werte erzeugt hat, ist dass ein Zufallsgenerator vor der Verwendung immer erst auf eine zufälligen Wert gesetzt werden muss. (Also ein Würfel der erst funktioniert, wenn du ihn mindestens schon einmal geworfen hast. :D)

Deshalb gibt es auch in anderen Sprachen eine Funktion die sich meist "Randomize" nennt. Die Random-Klasse macht das automatisch bei der Initialisierung. Allerdings führt die ständige Neuerzeugung des Zufallsgenerators zu extrem schlechten Ergebnissen, weil das Risiko extrem hoch ist, dass sehr die selben Zahlen erzeugt werden.


Nur so als Erklärung um zukünftige Fehler zu vermeiden und dieses Phänomen zu erklären. ;)
 
Thema:

random in C# nicht zufällig genug

random in C# nicht zufällig genug - Ähnliche Themen

Wie man/frau ein (Batch-)Programm schreibt: Hi Die Systemfunktionen des Kommandointerpreters sind hilfreich und nuetzlich fuer alle moeglichen Aufgaben, aber leider schlecht bis gar nicht...
Oben