2013-05-01 2 views
0

는 다음 코드 한 (문자열) 목록 : 나는 10 개 라인으로 구성된 최고 점수 목록을 가지고 있고, highscoreindex(정수) 목록의 중간에 삽입하고,

Private Sub highscoreCheck() 
    Dim a As Integer, b As String, c As Integer 
    For a = 1 To 10 
     If highscore > lst_score(a) Then 
      highscoreIndex = a 
      Exit For 
     End If 
    Next 
    If highscoreIndex > 0 Then 
     For highscoreIndex As Integer = 1 To 10 
      b = lst_name(highscoreIndex) 
      c = lst_score(highscoreIndex) 
      If highscoreIndex = a Then 
       lst_name(highscoreIndex) = userName 
       lst_score(highscoreIndex) = highscore 
      Else 
       lst_name(highscoreIndex) = b 
       lst_score(highscoreIndex) = c 
      End If 
     Next 

    End If 
End Sub 

는 의미 현재의 최고점이 어느 것보다 크고,있는 경우, highscoreIndex가 그 중 가장 높은 수보다 큽니다. (예 : 12, 8, 6). 현재 9는 9이고 하이 스코어 인덱스는 2입니다. 코드가 수행하기를 원하는 것은 현재의 최고 기록을 적절한 위치에 삽입하고 그 위치에있는 최고 기록을 작성하고 교체 한 기록을 아래로 이동시키는 것입니다. 현재 최고 기록을 삽입하지만 다른 기록은 내려 가지 않습니다. 무엇을 망쳤습니까? 어떻게해야합니까?

+1

당신은 [List.Insert] (http://msdn.microsoft.com/en-us/library/sey5k5z4.aspx)를 사용 할 필요가 :

여기에 빠른 예입니다. – Neolisk

+0

와우, 생각보다 훨씬 쉬웠다. 고마워. 이제 작동합니다. – Xetusath

+0

당신은 오신 것을 환영합니다! 항상 당신의 도구를 알아라! :) – Neolisk

답변

0

이름과 점수에 대해 별도의 배열을 사용하는 대신 클래스을 만들어 두 개의 연관된 값을 저장하십시오. 이 클래스가 IComparable을 구현하도록하여 클래스를 정렬 할 수 있도록합니다. 클래스의 인스턴스를 List()에 유지하면 ()으로 전화 할 수 있습니다. List에 추가하고 Sort()를 호출 한 후 원하는 숫자 만 왼쪽에 올 때까지 마지막 항목을 반복적으로 제거합니다.

Public Class Form1 

    Private Const MaxNumberOfHighScores As Integer = 3 
    Private HighScores As New List(Of ScoreEntry) 

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
     Dim score As New ScoreEntry 
     score.Name = "Bob" 
     score.Value = 7 
     AddEntry(score) 

     score = New ScoreEntry 
     score.Name = "George" 
     score.Value = 3 
     AddEntry(score) 

     score = New ScoreEntry 
     score.Name = "Dora" 
     score.Value = 9 
     AddEntry(score) 

     score = New ScoreEntry 
     score.Name = "John" 
     score.Value = 6 
     AddEntry(score) 

     score = New ScoreEntry 
     score.Name = "Jennifer" 
     score.Value = 10 
     AddEntry(score) 

     score = New ScoreEntry 
     score.Name = "Mike" 
     score.Value = 8 
     AddEntry(score) 

     For i As Integer = 0 To HighScores.Count - 1 
      Debug.Print(HighScores(i).Name & ": " & HighScores(i).Value) 
     Next 
    End Sub 

    Private Sub AddEntry(ByVal E As ScoreEntry) 
     HighScores.Add(E) 
     HighScores.Sort() 
     While HighScores.Count > MaxNumberOfHighScores 
      HighScores.RemoveAt(HighScores.Count - 1) 
     End While 
    End Sub 

End Class 

Public Class ScoreEntry 
    Implements IComparable(Of ScoreEntry) 

    Public Name As String 
    Public Value As Integer 

    Public Function CompareTo(other As ScoreEntry) As Integer Implements System.IComparable(Of ScoreEntry).CompareTo 
     Return other.Value.CompareTo(Me.Value) ' Sort Descending 
    End Function 

End Class 
+0

대단히 고마워요! – Xetusath

관련 문제