C# Random (gleiche Zahlen)

ActiveO2

Ensign
Dabei seit
Feb. 2009
Beiträge
161
Hallo,

ich habe einen Zufallsgenerator mit Hilfe von vs2008 Express Edition C# geschrieben.
Drücke ich auf einen Knopf, werden zB vier Ziffern zufällig in einer Textbox angezeigt.
Debugge ich das Programm ohne Breakpoint, dann habe ich viermal die gleiche Ziffer drinstehen.
Debugge ich MIT Breakpoint (in der Schleife) und lass die Schleife dann vier mal durchlaufen habe ich vier unterschiedliche Ziffern.

Hatte das selbe "phänomen" schoneinmal mit c++.
Kann mir jemand weiterhelfen?


Gruß,
ActiveO2





PS:
Code:
private static string xx= "abcdefgijkmnopqrstwxyz";
private static string xy= "0123456789";


        private void btn_create_Click(object sender, EventArgs e)
        {
            int number = Convert.ToInt32(txtb_number.Text);


            for (int i = 0; i < number; ++i)
            {
               int ronu = RandomNumber(0, 10);
                          
               if(ronu <= 5)
               {    
                   int roOl = RandomNumber(0, 20);
                   random_char(roOl);
               }
               else
               {
                   int roOl = RandomNumber(0, 7);
                   random_number(roOl);
               } 
                
            }

        }

        private int RandomNumber(int min, int max)
        {
            Random random = new Random();
            return random.Next(min, max);
        }

        private void random_char(int number_)
        {
            textBox1.Text += xx[number_];
        }
        private void random_number(int number_)
        {
            textBox1.Text += xy[number_];
        }


*stirnklatsch* habs gefunden
über
http://bytes.com/groups/net-c/603115-loop-only-runs-when-theres-breakpoint
bin ich auf
http://www.yoda.arachsys.com/csharp/miscutil/usage/staticrandom.html
gekommen.

Ich habe jetzt einfach einen Timer auf 15ms gesetzt. ^^
 
Zuletzt bearbeitet:
Wieso schreibst du das Ganze nicht einfach so:
PHP:
Random rnd = new Random();
for (int i = 0; i < 4; i++)
{
     Console.WriteLine(rnd.Next(0,7).ToString());
}

Dann kannst du dir auch den Timer sparen.
 
Habs jetzt nicht ausprobiert aber bekomme ich mit der for-Schleife nicht auch nur gleiche Ziffern heraus?

Soweit ich weiß funktioniert "Random()"über die Systemuhr?! und diese verändert sich, für die Schleife, zu langsam. => 4 gleiche Ziffern.


Weiß jemand die genaue Funktion von "Random()"?

Wirklicher Zufall kann es ja nicht sein (wenn ich mich nicht irre) von irgendwo muss sich die Funktion ja einen "Grund"wert holen, welcher (gegebenfalls mehrfach) verändert wird.
Was bedeuten würde, dass der Grundwert sich möglichst schnell verändern muss oder mit Abfragen, die Formel für die neue Zufallszahl geändert werden muss, falls sich der Grundwert nicht ändert.



MfG


PS: http://msdn.microsoft.com/de-de/library/h343ddh9.aspx
wenn ich die Randomfunktion nur einmal benutze habe ich trotzdem identische Ziffern.
 
Zuletzt bearbeitet:
Sollte sinnvoller sein, das Random-Objekt einmal zu initalisieren und dann Next() zu benutzen.
Bei mir gibt das jedenfalls prima "zufällige" Zahlen:
Code:
Random r = new Random();
for (int i = 0; i < 10; i++)
    Console.WriteLine(r.Next());
Wenn das nicht geht ist wohl irgendeine Einstellung vermurkst würde ich sagen.

Übrigens, zufällige Buchstabenfolgen würde ich bspw. so machen:
Code:
Random r = new Random();
string randomString = "";
for (int i = 0; i < 10; i++)
    randomString += (char)(r.Next(26)+97);
Console.WriteLine(randomString);
 
Zuletzt bearbeitet:
dein Random Objekt einfach global definieren, oder als attribut deiner klasse, fertig :-)


*und ich seh jetzt schon die flames kommen* :ugly:
 
Zurück
Top