Zufallszahlengenerator

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Sijence.

    Zufallszahlengenerator

    Guten Abend,

    ich habe schon lange nicht mehr in VB programmiert, deswegen habe ich mich gestern hingesetzt und mal wieder angefangen zu programmieren.

    Nun wollte ich, um die Funktion "random" zu verinnerlichen ein kleines Konsolenprogramm schreiben, welches mir mittels eine Schleife
    10 verschiedene Zufallszahlen generiert.

    Dazu hier mein Code:

    VB.NET-Quellcode

    1. Module Module1
    2. Sub Main()
    3. For i As Integer = 1 To 10
    4. Dim Generator As New Random
    5. Dim zufall As Integer = Generator.Next(1, 11)
    6. Console.WriteLine(zufall)
    7. Next
    8. Console.Read()
    9. End Sub
    10. End Module


    Hier bei tritt nun folgendes Problem auf, es wird entweder Zehnmal die selbe Zufallszahl angezeigt oder Einmal eine Zufallszahl und dann Neunmal eine andere, aber die selbe Zufallszahl.
    Beispiel:

    Quellcode

    1. 4
    2. 4
    3. 4
    4. 4
    5. 4
    6. 4
    7. 4
    8. 4
    9. 4
    10. 4


    oder:

    Quellcode

    1. 6
    2. 3
    3. 3
    4. 3
    5. 3
    6. 3
    7. 3
    8. 3
    9. 3
    10. 3


    Nun, könnt ihr mir bitte detailliert meinen Fehler erklären und diesen korrigieren, so damit ich daraus lernen kann.

    Vielen Dank,
    Sij
    Das "as new Random" muss aus der Schleife raus.
    Der Konstruktor initialisiert den RNG anhand der systemzeit und in einer kurzen Schleife wird er dann halt immer wieder mit demselben Wert initialisiert. Steht auch in MSDN unter Random als caveat.
    Setze die Zeile "Dim Generator as new Random" VOR die For-Schleife.

    Zitat MSDN:
    Standardmäßig verwendet der parameterlose Konstruktor der Random-Klasse die Systemuhr zum Generieren des Startwerts

    Soll heißen: beim Erstellen des Random-Objekts wird die Systemuhr zur Hilfe genommen, um einen Startwert zu erstellen, von dem aus die Zufallszahlen errechnet werden. Wenn du ganz schnell hintereinander in einer Schleife das Objekt immer wieder erzeugst, sind auch die Zahlen gleich.
    ich kann dir sagen, dass es so läuft:

    VB.NET-Quellcode

    1. Dim Generator As New Random
    2. For i As Integer = 1 To 10
    3. Dim zufall As Integer = Generator.Next(0, 9)
    4. Console.WriteLine(zufall.ToString)
    5. Next


    und auch, dass es so kürzer ist:

    VB.NET-Quellcode

    1. Dim Generator As New Random
    2. For i As Integer = 1 To 10
    3. Console.WriteLine(Generator.Next(0, 9).ToString)
    4. Next


    aber wieso sich das ganze so verhält... ?(

    EDIT: das hat dann der_kurz wohl gelöst ^^