Array Werte auslesen + IF

  • VB.NET

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

    Array Werte auslesen + IF

    Hallo liebes Forum,

    ich programmier zur Zeit in meiner Freizeit ein kleines Tool zum Ziehen der Lottozahlen.
    Ich stehe aber momentan voll auf dem Schlauch.
    Meine Lottozahlen werden in einer For-Next Schleife per Randomize in ein Array geschrieben.
    Ich möchte allerdings, dass falls es eine Lottozahl im Array schon gibt, dass er nochmals eine neue Zahl generiert (solang bis wirklich 6 verschiedene Zahlen in meiner txt stehen). Ich hänge aber irgendwie fest da ich nicht genau weiß, wie ich das mir ordnen soll.
    Hier mal der kleine Quelltext:

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class frmLotto
    3. Dim Lottozahlen(6) As Integer
    4. Private Sub btnZiehung_Click(sender As Object, e As EventArgs) Handles btnZiehung.Click
    5. Dim i As Integer = 0
    6. txtZahlen.Clear()
    7. txtSuperzahl.Clear()
    8. For i = 0 To 6 Step 1
    9. Lottozahlen(i) = Convert.ToInt32(Int(49 * Rnd() + 1))
    10. Next
    11. For j = 0 To 5 Step 1
    12. txtZahlen.Text = txtZahlen.Text & " " & Lottozahlen(j).ToString
    13. Next
    14. txtSuperzahl.Text = Lottozahlen(6).ToString
    15. End Sub
    16. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    17. Randomize()
    18. End Sub
    19. End Class


    Dass ich in der ersten Schleife arbeiten muss ist mir bekannt, allerdings weiß ich nicht wie ich da eine IF-Anweisung einfügen soll.
    Von der Logik her dachte ich an:

    VB.NET-Quellcode

    1. For i = 0 To 6 Step 1
    2. Lottozahlen(i) = Convert.ToInt32(Int(49 * Rnd() + 1))
    3. If Hilfsvariable(i) = Lottozahlen(i) Then
    4. Do Until Hilfsvariable(i) Is Not Lottozahlen(i)
    5. Lottozahlen(i) = Convert.ToInt32(Int(49 * Rnd() + 1))
    6. Loop
    7. Lottozahlen(i) = Hilfsvariable(i)
    8. End If
    9. Next

    Dass das mit "is not" nicht funktioniert ist mir bewusst.
    Hat da jemand Tipps für mich? :)
    Sieh dir das mal an:

    VB.NET-Quellcode

    1. Sub Main()
    2. Dim sList As New List(Of Integer) ' Statt Array eine List(of)
    3. Dim r As New Random ' .Net Version von Randomize()
    4. Dim NeueZahl As Integer ' Zwischen-Var für die NeueZahl
    5. Dim fExist As Boolean ' Flag um aus der Schleife zu "entkommen"
    6. For i As Integer = 0 To 5 ' 6 Zahlen
    7. fExist = False
    8. Do
    9. NeueZahl = r.Next(1, 45) ' Neue Zahl definieren
    10. If Not sList.Contains(NeueZahl) Then ' Falls diese nicht vorhanden ist hinzuügen und flag setzen
    11. sList.Add(NeueZahl)
    12. fExist = True
    13. End If
    14. Loop Until fExist
    15. Next
    16. ' Ausgabe
    17. For Each item In sList
    18. Console.WriteLine(item.ToString)
    19. Next
    20. ' Ausgabe sortiert
    21. For Each item In sList.OrderBy(Function(n) n)
    22. Console.WriteLine(item.ToString)
    23. Next
    24. Console.Read()
    25. End Sub


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    fExist ist grad falschrum benannt, denn es ist gesetzt, wenn grad diese Lottokugel nicht existiert.

    Insgesamt würde ich den Vorgang aber näher anne Realität modellieren.
    Inne Realität wird jeweils eine Kugel aus dem Vorrat entnommen und in die Ausgabe gelegt. Und das kann man ja ganz einfach im Code nachbilden, indem man den Zahlen-Vorrat in eine Liste packt, und mit Random eine Zahl entnimmt, und die dann auch tatsächlich aus dem Zahlenvorrat rauslöscht.

    Also für die Funktionalität ists eiglich glaub schnurz - nurso als Übung in Datenmodellierung.

    Dieses Prinzip "Zufalls-Ziehung" ist glaub auch ganz allgemein-verwertbar, das hat man auch in jeder Verlosung, und inne Mathematik, Wahrscheinlichkeitslehre spielt das auch eine gewichtige Rolle.
    Vielen Dank für die guten Antworten :)
    Ich habe den Trick von picoflop (siehe Post von Kangaroo mit LinQ) benutzt und siehe da, funktioniert ! :)

    Nochmals Danke! :thumbsup:

    Hier mein Quelltext für die Nachwelt :P

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class frmLotto
    3. Private Sub btnZiehung_Click(sender As Object, e As EventArgs) Handles btnZiehung.Click
    4. Dim r As New Random
    5. Dim a(48) As Integer
    6. txtZahlen.Clear()
    7. txtSuperzahl.Clear()
    8. For i As Integer = 1 To 49
    9. a(i - 1) = i
    10. Next
    11. Dim b() As Integer = (From i As Integer In a Order By r.NextDouble Select i Take 7).ToArray
    12. For j = 0 To 5 Step 1
    13. txtZahlen.Text = txtZahlen.Text & " " & b(j).ToString
    14. Next
    15. txtSuperzahl.Text = b(6).ToString
    16. End Sub
    17. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    18. Randomize()
    19. End Sub
    20. End Class

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „BraInLagg“ ()