developers-forum.de

Normale Version: VB.net Programm hängt sich auf (warscheinlich eine Schleife)
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo erst mal Ich hab mal wieder ein Problem bekommen
mit meinem boule Programm

Ich habe
ein Array um alle Gegner zu speichern

Dim Gegner(200) As Integer ' Das Array das alle Gegner aufnimt !

und in einem Integer steht die Anzahl der Manschaften

Dim AnzManschaften As Integer

Jetzt noch die anderen Variablen die sich von selbst erklären

Code:
Dim Freilos As String ' noch nicht benutzt (dort steht drinne ob mit oder ohne Freilos)
Dim oZahl As New System.Random ' Später für die zufallszahl
Dim oList As New SortedList ' Liste für runde 1
Dim oList1 As New SortedList ' Liste für runde 2
Dim oList2 As New SortedList ' Liste für runde 3
Dim oList3 As New SortedList ' Liste für runde 4
Dim Gegner1 As String ' Dort wird Später die Gegner Nummer Zwischengespeichert !
Dim b As Integer ' Ein Integer der die Anzahl von manschaften nochmal aufnimt !


Danach lese ich die Anzahl der Manschaften aus und speicher sie
so Bsp. Anzahl manschaften = 10


Jetzt kommt die Auslosung für die Erste Runde

Code:
For i = 1 To AnzManschaften
            Do
                Randomize() ' damit ist es warscheinlicher das nicht zweimal die gleiche zusammen setzung beim Losen entsteht
                b = AnzManschaften + 1
                Gegner1 = oZahl.Next(1, b) ' Zufällige zahl von 1 und Anzahl der Manschaften !
                If Not oList.ContainsValue(Gegner1) Then ' wenn gegner noch nicht gezogen dann
                    oList.Add(Gegner1, Gegner1) ' schreibe ihn in die Liste
                    Gegner(i) = Gegner1 ' und in das Array
                    Exit Do ' Nächster Gegner
                End If ' Fals nicht nochmal Losen
            Loop
Next


Das Funktioniert wol ich weis nicht WO in dem Programm er sich aufhängt (Vb zeigt nichts an keine Fehler Meldung oder so was das programm hängt einfach und ich muss es durch Taskmanager zumachen)

danach schreib ich alle Gegner in Textboxen (da sollte es keine Probleme geben immer nur)
Textbox1.text = Gegner(1)
....
usw.

Danach Zweite Runde


Code:
For i = 1 To AnzManschaften
            Do
                Randomize()
                b = AnzManschaften + 1
                Gegner1 = oZahl.Next(1, b) ' Zufällige zahl von 1 und Anzahl der Manschaften !
                If Not oList1.ContainsValue(Gegner1) Then ' wenn gegner noch nicht gezogen dann
                    If Not Gegner1 = Gegner(i) Then ' Darf Dieser Gegner nicht der Gegner von Letzter Runde sein !! dann
                        oList1.Add(Gegner1, Gegner1) ' schreibe ihn in die Liste
                        Gegner(i + 50) = Gegner1 ' und in das Array
                        Exit Do ' Nächster Gegner
                    End If
                End If ' Fals nicht nochmal Losen
            Loop
Next


Nächste Runde

Code:
For i = 1 To AnzManschaften
            Do
                Randomize()
                b = AnzManschaften + 1
                Gegner1 = oZahl.Next(1, b) ' Zufällige zahl von 1 und Anzahl der Manschaften !
                If Not oList2.ContainsValue(Gegner1) Then ' wenn gegner noch nicht gezogen dann
                    If Not Gegner1 = Gegner(i) Then ' Darf Dieser Gegner nicht der Gegner von Runde 1 sein !! dann
                        If Not Gegner1 = Gegner(i + 50) Then ' Darf Dieser Gegner nicht der Gegner von Runde 2 sein !! dann
                            oList2.Add(Gegner1, Gegner1) ' schreibe ihn in die Liste
                            Gegner(i + 100) = Gegner1 ' und in das Array
                            Exit Do ' Nächster Gegner
                        End If
                    End If
                End If ' Fals nicht nochmal Losen
            Loop
Next


Letzte Runde

Code:
For i = 1 To AnzManschaften
            Do
                Randomize()
                b = AnzManschaften + 1
                Gegner1 = oZahl.Next(1, b) ' Zufällige zahl von 1 und Anzahl der Manschaften !
                If Not oList2.ContainsValue(Gegner1) Then ' wenn gegner noch nicht gezogen dann
                    If Not Gegner1 = Gegner(i) Then ' Darf Dieser Gegner nicht der Gegner von Runde 1 sein !! dann
                        If Not Gegner1 = Gegner(i + 50) Then ' Darf Dieser Gegner nicht der Gegner von Runde 2 sein !! dann
                            If Not Gegner1 = Gegner(i + 100) Then ' Darf Dieser Gegner nicht der Gegner von Runde 3 sein !! dann
                                oList3.Add(Gegner1, Gegner1) ' schreibe ihn in die Liste
                                Gegner(i + 150) = Gegner1 ' und in das Array
                                Exit Do ' Nächster Gegner
                            End If
                        End If
                    End If
                End If ' Fals nicht nochmal Losen
            Loop
Next



Ich hab ja die Vermutung das es eine Warscheinlichkeit gibt das er z.b. am Anfang die falsche Zahl nimt und dann am Ende nicht mehr weiter kommt (er hängt sich dann in einer loop schleife auf weil er nur noch eine zahl als Gegner nehmen darf diese aber schon wo anders eingesetzt ist ????) könnte doch sein wär echt super wenn ihr ne Lösung findet.
Danke schonmal

nacramell schrieb:
Ich hab ja die Vermutung das es eine Warscheinlichkeit gibt das er z.b. am Anfang die falsche Zahl nimt und dann am Ende nicht mehr weiter kommt (er hängt sich dann in einer loop schleife auf weil er nur noch eine zahl als Gegner nehmen darf diese aber schon wo anders eingesetzt ist ????) könnte doch sein wär echt super wenn ihr ne Lösung findet.
Danke schonmal

Das ist gut möglich, du könntest ja mal in den Schleifen was ausgeben, um zu schauen, in welcher das Prog. tatsächlich hängen bleibt.

Alternativ zu erneut "würfeln" könnte man auch einfach solange das nächste Element wählen, bis eins frei ist. Dürfte aber nicht ganz auf die gleiche Wahrscheinlichkeit führen.

N43

Ja das könnte ich machen. aber kann das nicht auch zum Gleichen Problem Führen wenn er bei der letzten zahl dann nur noch eine Nehmen "kann" aber diese halt schon z.b. als Gegner in der Zweiten Runde drann war ??
weil ich denk deswegen hängt sich des auf also könnte es in Jeder Schleife auftreten Ist halt Zufall ^^

Edit: ich hab mal Eine Msgbox gemacht die sagt mir immer die Gegner nummern er bleibt eig Immer bei runde 3 oder 4 hängen !!(und es ist höchst warscheinlich das es durch das losen kommt !!) Gleiches Problem (er will für einen Gegner z.b. Gegner 10 eine Zahl rausfinden hat aber schon alle auser die 9 genommen jetzt kommt halt immer die Neun raus Poblem nur die "9" hatte die Manschaft 10 schon in der letzten Runde ^^)
Kann mir niemand helfen (Eine andere methode zulosen vll. ??)
Ne andere Methode zum losen gibt es eigentlich nicht, du musst das irgendwie über schieben lösen. Wenn du beim Schieben beim letzten Element ankommst musste eben wieder beim ersten Element mit dem Schieben weitermachen.


N43
Ist nicht ganz in der gleichen Wahrscheinlichkeit führen.in der letzten Reihe dauert nur eine, sondern können sie bereits als Gegner in der zweiten Runde wurde.
Referenz-URLs