2017-03-09 2 views
0

Ich mache derzeit eine Highscore-Tabelle - Lesen der Zeiten aus einer .csv-Datei und Sortieren von der niedrigsten zum höchsten. Die Liste wird nur teilweise sortiert, nachdem der Code ausgeführt wurde.Wo ist mein Fehler in diesem visuellen Basis Bubblesort

Dies ist die Art, wie ich die Zeiten aus der Datei eingeben, so dass das Problem hier sein kann.

Private Sub BeginnerInput(ByRef player() As pe_player, ByRef x As Integer) 

    Dim path As String = "Z:\S6\Computing Science\PROJECT\Project\BeginnerLeaderboard.csv" 

    Dim leaderboard As StreamReader = New StreamReader(path) 

    Do While leaderboard.Peek() > -1 
     leaderboard.ReadLine() 
     x += 1 
    Loop 

    leaderboard.Close() 

    FileOpen(1, "Z:\S6\Computing Science\PROJECT\Project\BeginnerLeaderboard.csv", OpenMode.Input) 

    For i = 1 To x 
     Input(1, player(i).playerName) 
     Input(1, player(i).playerTime) 
     player(i).position = i 
    Next 

    FileClose() 

End Sub 

Alle Daten korrekt eingegeben, aber wenn es sortiert wird, werden die Daten falsch sortiert. Wenn ich 10 Einträge in der .csv-Datei habe, sortiert er vier Einträge, um weitere vier Einträge zu sortieren, dann wird der Rest unten sortiert. Wenn ich also die Nummern 1,2,3,4,5,6,7 hätte, 8,9,10 könnte es als 1-4-5-8-2-3-5-7-6-10 sortieren.

Private Sub BeginnerProcess(ByRef player() As pe_player, ByVal x As Integer) 

    Dim i As Integer 
    Dim j As Integer 
    Dim temp As Object 

    For i = x To 0 Step -1 
     For j = 0 To i - 1 
      If player(j).playerTime > player(j + 1).playerTime Then 
       temp = player(j) 
       player(j) = player(j + 1) 
       player(j + 1) = temp 
      End If 
     Next 
    Next 

    Dim k As Integer 

    For k = 1 To x 
     player(k).position = k 
    Next 

End Sub 

Hier ist der Ausgang Leaderboard

+0

Haben Sie durch den Code trat ein Debugger und gesucht, wo das Problem auftritt? –

+0

Ja, ich kann den Fehler nicht mit einem Breakpoint –

Antwort

0

Anpassung der klassischen Bubble-Art zu Ihrem Fall, ich glaube ich so etwas wie den Code unten sein sollte:

For i = 0 To x - 1 
    For j = i + 1 To x 
     If player(i).playerTime > player(j).playerTime Then 
      temp = player(i) 
      player(i) = player(j) 
      player(j) = temp 
     End If 
    Next 
Next 
+0

@ A.Colver haben Sie den Code oben in meiner Antwort versuchen? –

+0

Ich habe es versucht Ich bekomme immer noch das gleiche Ergebnis. –

+0

Was ist 'Spieler'? Klassenarray? welcher Typ ist es? –