Zufall immer gleich

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von phil.

    Zufall immer gleich

    Hallo

    ich habe ein kleines Programm geschrieben, das eigentlich Zufallszahlen testen sollte.

    VB.NET-Quellcode

    1. Dim s As String = ""
    2. For i = 0 To 20
    3. s = s & vbCr & randomNumber(2, 5)
    4. Next
    5. MsgBox(s)
    6. Function randomNumber(minNumber As Integer, maxNumber As Integer) As Integer
    7. Randomize() 'trotzdem funktioniert es nicht
    8. Return New Random().Next(minNumber, maxNumber + 1)
    9. End Function


    Wenn ich jetzt die MsgBox mit den Zufallszahlen aufrufe, kommt zwanzig mal die gleiche Zufallszahl. 3, 3, 3, 3, 3, 3, ...
    Beim nächsten MsgBox-Aufruf kommt zwanzig mal eine andere Zufallszahl. 2, 2, 2, 2, 2, 2, ...

    Weiß jemand, warum das so ist?
    Du mischt da 2 verschiedene Randomgenerator
    Randomize ist für den Randomgenerator Rnd() (welchen du gar nicht benutzt) aus dem VB Namespace.

    Dein 2. Fehler ist das wiederholte Erstellen von Random und dem damit verbundenen initialisieren des Seeds.

    Les dir die MSDN Seite zu Rnd, Randomize und Random durch...
    Oder mit anderen Worten:

    Immer wenn du mit New Random() einen neuen Zufallszahlengenerator erzeugst, benutzt er als "Seed" den aktuellen Systemtimer. Der hat aber "nur" eine Auflösung von 1 Millisekunde. Während du also in deiner Schleife mehrmals hintereinander eine Zufallszahl abfragst, wird jedes Mal ein neues Random-Objekt erzeugt, in der Zwischenzeit sind aber nur Bruchteile von Millisekunden vergangen, der Systemtimer hat sich also nicht merklich verändert, der Seed bleibt für 1/1000 Sekunde identisch, folglich sind die erzeugten Zufallszahlen immer gleich.
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.