Wie verhindere ich beim Random doppelte zahlen?

  • VB6

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von alchimist.

    Wie verhindere ich beim Random doppelte zahlen?

    Wie kann ich verhindern das bei der Rnd Funktion doppelte zahlen kommen?

    Mein Script bis jetzt....bitte nicht lachen, denn is voll wenig...^^


    Private Sub LZG_Click()

    Dim Zahl1 As Integer
    Dim Zahl2 As Integer
    Dim Zahl3 As Integer
    Dim Zahl4 As Integer
    Dim Zahl5 As Integer
    Dim Zahl6 As Integer

    Randomize Timer
    Zahl1 = Int(49 * Rnd) + 1
    Zahl2 = Int(49 * Rnd) + 1
    Zahl3 = Int(49 * Rnd) + 1
    Zahl4 = Int(49 * Rnd) + 1
    Zahl5 = Int(49 * Rnd) + 1
    Zahl6 = Int(49 * Rnd) + 1

    MsgBox Zahl1 & " | " & Zahl2 & " | " & Zahl3 & " | " & Zahl4 & " | " & Zahl5 & " | " & Zahl6 & " |"

    End Sub
    Den Inhalt der Funktion hast du doch schon selber geschrieben:
    Int(49 * Rnd) + 1

    jetzt musst du nur noch eine funktion draus machen ala:

    Visual Basic-Quellcode

    1. function zufall() as integer
    2. zufall = Int(49 * Rnd) + 1
    3. end function
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau
    okay, hab mal fix für dich was zusammengemischt. bin leider nicht mehr so ganz mit der vb 6 syntax vertraut, aber es müsste funktionieren. ;)

    Visual Basic-Quellcode

    1. 'ich habe deine 6 variablen zu einem array gemacht, da diese leichter in schleifen zu verwenden sind
    2. Dim zahlen(1 To 6) As Integer
    3. Private Sub LZG_Click()
    4. 'das array wird erstmal geleert, falls man den code mehrmals aufruft (falls es eine bessere möglichkeit in
    5. 'vb 6 dafür gibt: immer her damit)
    6. For i = 1 To 6
    7. zahlen(i) = 0
    8. Next
    9. 'eine zufallszahlvariable wird deklariert auf die zugegriffen werden kann um zu kontrollieren, ob sie
    10. 'schon einmal verwendet wurde
    11. Dim zufallszahl As Integer
    12. Randomize Timer
    13. 'befülle das array mit unterschiedlichen zufallszahlen
    14. For i = 1 To 6
    15. 'suche solange nach einer neuen zufallszahl bis eine gefunden wird, die noch nicht verwendet wird
    16. Do
    17. zufallszahl = Int(49 * Rnd) + 1
    18. Loop While vorhanden(zufallszahl)
    19. zahlen(i) = zufallszahl
    20. Next
    21. End Sub
    22. Private Function vorhanden(zahl As Integer) As Boolean
    23. 'es wird erstmal festgelegt, dass die zufallszahl schon vorhanden ist
    24. vorhanden = True
    25. 'das array wird durchgelaufen und geprüft ob die zufallszahl schon exisitiert
    26. For i = 1 To 6
    27. 'falls ja dann beende die funktion -> der "funktionszustand" wird nicht geändert und somit bleibt es bei
    28. 'der aussage, dass die zufallszahl schon verwendet wurde
    29. If zahlen(i) = zahl Then Exit Function
    30. Next
    31. 'es wird festgelegt, dass die zufallszahl doch nicht exisitiert
    32. 'dieser code wird nur durchgeführt wenn die funktion vorher nicht schon aufgrund von bereits existenten zufallszahl
    33. 'beendet wurde
    34. vorhanden = False
    35. End Function


    habe versucht alles zu beschreiben und hoffe du verstehst alles ;)


    /edit:
    okay, bin erstmal viel zu spät ^^ und zweitens fällt mir gerade auf dass die kommentare wahrscheinlich länger als der eigentlich code ist :D naja, hauptsache du verstehst es 8)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Phil“ ()

    in wie fern? bei mir hat es eigentlich funktioniert. zugreifen kannst du auf die einzelnen zahlen mit zahl(1), zahl(2) usw.

    kommt eine fehlermeldung oder wie äußert sich das "nicht funktionieren"?

    wenn du die zahlen auch noch ausgeben lassen willst dann musst du das ungefähr so machen:

    Visual Basic-Quellcode

    1. Msgbox "1. Zahl: " & zahl(1)
    ja aber guck mal mein script sieht jetzt wie folgt aus..

    Private Sub LZG_Click()

    Dim Zahl1 As Integer, Zahl2 As Integer, Zahl3 As Integer, Zahl4 As Integer, Zahl5 As Integer, Zahl6 As Integer



    Randomize Timer
    Zahl1 = Int(49 * Rnd) + 1
    Zahl2 = Int(49 * Rnd) + 1
    Zahl3 = Int(49 * Rnd) + 1
    Zahl4 = Int(49 * Rnd) + 1
    Zahl5 = Int(49 * Rnd) + 1
    Zahl6 = Int(49 * Rnd) + 1

    Dim i
    For i = 1 To 6
    zahlen(i) = 0
    Next


    MsgBox "Deine GlücksLottoZahlen sind:" & Chr(13) & Chr(13) & " | " & Zahl1 & " | " & Zahl2 & " | " & Zahl3 & " | " & Zahl4 & " | " & Zahl5 & " | " & Zahl6 & " | " & Test, vbYes, "Alterangabe"

    End Sub
    Private Sub Timer1_Timer()
    Label1.Caption = Now
    End Sub


    Private Function vorhanden(zahl As Integer) As Boolean
    vorhanden = True
    For i = 1 To 6

    If zahlen(i) = zahl Then Exit Function
    Next
    vorhanden = False
    End Function
    Hallo zusammen,

    hier mein kleiner Quelltext zu dem Thema:

    Visual Basic-Quellcode

    1. Option Explicit
    2. 'Zufallszahlen erzeugen
    3. Private Function GetRandomNum(Min As Long, Max As Long) As Long
    4. GetRandomNum = Int(Rnd * (Max - Min + 1) + Min)
    5. End Function
    6. 'Testet, ob die Zahl NUM schon im Array ARR ist
    7. Private Function isInArray(arr() As Long, Num As Long) As Boolean
    8. Dim i As Long
    9. For i = LBound(arr) To UBound(arr)
    10. If arr(i) = Num Then isInArray = True: Exit Function
    11. Next i
    12. End Function
    13. Private Sub Command1_Click()
    14. Dim i As Long
    15. Dim lngTmp As Long
    16. Dim arr(1 To 6) As Long
    17. 'Initialisierung des Zufallszahlengenerators
    18. Randomize
    19. 'Befülle das Array
    20. For i = 1 To 6
    21. 'falls Zufallszahl schon im Array, muss eine neue gefunden werden
    22. Do
    23. lngTmp = GetRandomNum(1, 49)
    24. Loop While isInArray(arr, lngTmp)
    25. arr(i) = lngTmp
    26. Next i
    27. 'Hier das Ergebnis
    28. MsgBox arr(1) & vbCrLf & arr(2) & vbCrLf & arr(3) & vbCrLf & arr(4) & vbCrLf & arr(5) & vbCrLf & arr(6)
    29. End Sub


    Gruß Markus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „alchimist“ ()