zufallsgenerator: Zahlen ausschleißen

  • VB.NET

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

    zufallsgenerator: Zahlen ausschleißen

    Hallo zusammen ,

    ich habe einen zufallsgenerator programmiert: 1 Button zum Generieren, 6 Label und in jedem Label die Zahlen 1 bis 49. Wie setze ich per If befehl um das keine Zahl zweimal
    vorkommt wenn man auf den Button Generieren klickt ,der jedem Label siene Zufallszahl zuweist?

    mfg
    F@bian

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „F@bian“ ()

    Hmm, die ganzen Zahlen in einem Array speichern und dann jedesmal, wenn eine neue Zahl generiert wird, überprüfen, ob sie schon im Array vorkommt, wenn ja, eine neue zufallszahl generieren und sie wieder abprüfen.

    Was Besseres fällt mir jetzt grad nicht ein. ^^

    VB.NET-Quellcode

    1. Private Function GenerateNumbers(ByVal min As Integer, ByVal max As Integer) As String()
    2. '(5), da der Index bei 0 beginnt
    3. Dim zahlen(5) As String
    4. Dim counter As Integer = 0
    5. While counter < 6
    6. Dim generated As Integer = New Random().Next(min, max)
    7. If Not zahlen.Contains(generated.ToString()) Then 'Oder: If Array.IndexOf(zahlen, generated) = -1
    8. zahlen(counter) = generated.ToString()
    9. counter += 1
    10. End If
    11. End While
    12. Return zahlen
    13. End Function


    Aufruf: Dim numbers As String() = GenerateNumbers(min, max)

    Du kannst dies auch umschreiben, damit jedes Label einen Wert erhält.

    MfG
    LaPi, Deine Function sieht mir aber ein bisschen suspekt aus:

    - seit wann hat ein Array eine contains Methode ?
    - und selbst wenn man das ändert bekommen manche Label garkeinen Wert

    Verbessere den nochmal, oder ich überlege mir noch etwas : - d.h. sofern jvbsl bis dahin keine perfekte Lösung gepostet hat
    eigentlich extrem simpel: Zahlen in Array, Array durcheinanderwürfeln und dann die ersten 6 Elemente nehmen.

    VB.NET-Quellcode

    1. Dim a(48) As Integer
    2. For i As Integer = 1 To 49
    3. a(i - 1) = i
    4. Next
    5. Dim r As New Random
    6. Dim b() As Integer = (From i As Integer In a Order By r.NextDouble Select i Take 6).ToArray