Random Bug

  • VB.NET

Es gibt 75 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Du vergleichst die abgespeicherte Zahl und die nun durch Zufall ausgewählte Zahl. Wenn die gleich sind, ist es die vom letzten mal und du wiederholst den Vorgang.

    VB.NET-Quellcode

    1. If Not RandomNumber = SavedNumber then
    2. 'was tun wenn nicht die vom letzten mal
    3. Else
    4. 'wiederholen
    5. End If

    Es existiert ein Interesse an der generellen Rezession der Applikation relativ primitiver Methoden komplimentär zur Favorisierung adäquater komplexer Algorithmen.
    ------------------------------------------------------------------------------------
    Rising Existence - das GTA V-MP Projekt mit Zukunft und Innuvation

    TIecIh schrieb:

    Den letzten Wert speichere ich ab
    Dann speichere den Zustand ob ausgewählt ebenfalls mit ab.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Mach dir ne Liste oder sonstiges und speichere dort die Zahlen ein, bei jedem neuen Durchlauf prüfst du ob die Zahl schon vorhanden ist und wenn ja dann machste noch einen Durchlauf..
    Wo ist das Problem? Mit der Textbox als Speichermittel solltest du schon mal garnig arbeiten, trenne GUI und Daten!
    Mit dem Text meinst du die zahlen?
    Leg in den Einstellungen eine Liste an und speichere dort die Werte deiner Liste immer ab und lese sie beim Programmstart aus.
    Es existiert ein Interesse an der generellen Rezession der Applikation relativ primitiver Methoden komplimentär zur Favorisierung adäquater komplexer Algorithmen.
    ------------------------------------------------------------------------------------
    Rising Existence - das GTA V-MP Projekt mit Zukunft und Innuvation
    die Random klasse hat ein hässlichen bug undzwer wen man sie doppelt oder merfach Deklariert und Instanziert dann wird immer das gleiche Ergebniss herausgegeben -.-
    Das Random/ die Wahrscheinlichtkeit gibt es (noch) es wird mathematisch berechnet. Und es ist mMn kein Bug, weil wenn du immer wieder eine neues Random instanzierst und es gleich berechnet wird, dann ist es ja klar das sowas passiert. ;)

    Maik H. schrieb:

    Mit dem Text meinst du die zahlen?
    Leg in den Einstellungen eine Liste an und speichere dort die Werte deiner Liste immer ab und lese sie beim Programmstart aus.

    Wenn ich die Einstellungen speichere werden die in AppData gespeichert, das brauche ich nicht, nur wenn das Programm am laufen ist soll nur jede Random Zahl von z.B. 1-8 einmal generiert werden, also brauchen sie nur vorrübergehend gemerkt werden, beim nächsten Programmstart ist mir das egal, da kann eine neue merkListe angelegt werden.

    VB.NET-Quellcode

    1. ​Dim _generatedValues As New List(Of Integer)()
    2. _generatedValues.Add(deineZahl)
    3. 'zahl schon generiert.
    4. If _generatedValues.Contains(zahldieüberprüftwerdensoll) Then
    5. End If


    Die Liste muss natürlich auf Klassen-ebene deklariert werden.

    VB.NET-Quellcode

    1. Dim rnd1 As New Random()
    2. Dim _generatedValues As New List(Of Integer)()
    3. Private Sub TabPage2_Enter(sender As System.Object, e As System.EventArgs) Handles TabPage2.Enter
    4. Try
    5. If ListView1.Items.Count > -1 Then
    6. Label9.Text = ListView1.Items.Count
    7. Else
    8. Label9.Text = 0
    9. End If
    10. TextBox1.Text = rnd1.Next(0, Label9.Text).ToString
    11. If _generatedValues.Contains(TextBox1.Text.ToString) Then
    12. TabControl1.SelectedTab.Refresh()
    13. End If
    14. _generatedValues.Add(TextBox1.Text.ToString)
    15. Dim Nummer As Integer = TextBox1.Text
    16. For Each Item In ListView1.Items(Nummer).SubItems(3).Text
    17. RichTextBox3.AppendText(Item.ToString)
    18. Next
    19. For Each Item In ListView1.Items(Nummer).SubItems(4).Text
    20. TextBox2.AppendText(Item.ToString)
    21. RichTextBox5.AppendText(Item.ToString)
    22. Next
    23. For Each Item In ListView1.Items(Nummer).SubItems(5).Text
    24. TextBox3.AppendText(Item.ToString)
    25. Next
    26. Catch
    27. MsgBox("Fehler")
    28. TabControl1.SelectedTab = TabPage3
    29. End Try
    30. End Sub

    So sieht die Sub aus, doch leider funktioniert das nicht irgentwo muss ein Fehler sein... (sry für meine "Dummen" Fragen)
    Hast du Option Strict On?
    >>> "Label9.Text = 0"
    Es existiert ein Interesse an der generellen Rezession der Applikation relativ primitiver Methoden komplimentär zur Favorisierung adäquater komplexer Algorithmen.
    ------------------------------------------------------------------------------------
    Rising Existence - das GTA V-MP Projekt mit Zukunft und Innuvation
    Sei mir bitte nicht böse, aber vermutlich solltest du dein ganze Projekt neu starten.

    Du hast eine List<of Integer> deklariert befüllst diese aber mit Strings. Soetwas kann auch nicht funktionieren: '_generatedValues.Contains(TextBox1.Text.ToString)' und die TextBox ist bereits ein string du konvertierst also string zu string ;)

    Ich hab dir mal ein beispiel geschrieben, das ganze ist mit nem Online Converter konvertiert.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub SomthingToDo()
    2. Dim rnd As New Random()
    3. Dim iGeneratedRandomList As New List(Of Integer)()
    4. If listView1.Items IsNot Nothing AndAlso listView1.Items.Count > 0 Then
    5. label1.Text = listView1.Items.Count.ToString()
    6. Else
    7. label1.Text = "0"
    8. End If
    9. Dim iMaxRndCount As Integer = 0
    10. If Not Int32.TryParse(label1.Text, iMaxRndCount) Then
    11. MessageBox.Show("Fehler keine Zahl. . .")
    12. Return
    13. End If
    14. Dim iCurRndValue As Integer = rnd.[Next](0, iMaxRndCount)
    15. textBox1.Text = iCurRndValue.ToString()
    16. If ExistInList(iCurRndValue, iGeneratedRandomList) Then
    17. tabControl1.SelectedTab.Refresh()
    18. End If
    19. iGeneratedRandomList.Add(iCurRndValue)
    20. End Sub
    21. Private Function ExistInList(searchValue As Integer, rndGeneratedList As List(Of Integer)) As Boolean
    22. For i As Integer = 0 To rndGeneratedList.Count - 1
    23. If rndGeratedList(i) = searchValue Then
    24. Return True
    25. End If
    26. Next
    27. Return False
    28. End Function



    Allerdings musste ich bei deinen Listview -Schleifen passen. Was willst du denn damit bewerkstelligen?
    Gute Lösung, gleiches Ergebnis:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub TabPage2_Enter(sender As System.Object, e As System.EventArgs) Handles TabPage2.Enter
    2. Try
    3. Dim rnd As New Random()
    4. Dim iGeneratedRandomList As New List(Of Integer)()
    5. If ListView1.Items IsNot Nothing AndAlso ListView1.Items.Count > 0 Then
    6. Label9.Text = ListView1.Items.Count.ToString()
    7. Else
    8. Label9.Text = "0"
    9. End If
    10. Dim iMinRndCount As Integer = 0
    11. If Not Int32.TryParse(Label9.Text, iMinRndCount) Then
    12. MessageBox.Show("Fehler keine Zahl. . .")
    13. Return
    14. End If
    15. Dim iCurRndValue As Integer = rnd.[Next](0, iMinRndCount)
    16. TextBox1.Text = iCurRndValue.ToString()
    17. If ExistInList(iCurRndValue, iGeneratedRandomList) Then
    18. TabControl1.SelectedTab.Refresh()
    19. Else
    20. Dim Nummer As Integer = TextBox1.Text
    21. For Each Item In ListView1.Items(Nummer).SubItems(3).Text
    22. RichTextBox3.AppendText(Item.ToString)
    23. Next
    24. For Each Item In ListView1.Items(Nummer).SubItems(4).Text
    25. TextBox2.AppendText(Item.ToString)
    26. RichTextBox5.AppendText(Item.ToString)
    27. Next
    28. For Each Item In ListView1.Items(Nummer).SubItems(5).Text
    29. TextBox3.AppendText(Item.ToString)
    30. Next
    31. End If
    32. End If
    33. iGeneratedRandomList.Add(iCurRndValue)
    34. Catch
    35. MsgBox("Fehler")
    36. TabControl1.SelectedTab = TabPage3
    37. End Try
    38. End Sub
    @TIecIh War doch alles schon da, Du hast es nur ignoriert. ;(

    RodFromGermany schrieb:

    Pack die in eine List(Of String) ==> .ToArray dann per WriteAllLines(...) auf Platte.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!