2014-01-27 2 views
0
Public Class Form3 
Public Swapped As Boolean 
Public ComparisonNumber As Integer 
Dim Temp As String 
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 

    Swapped = True 
    While Swapped = True 
     Swapped = False 
     ComparisonNumber = 0 
     While ComparisonNumber < PatientCount 
      If Names(ComparisonNumber) > Names(ComparisonNumber + 1) Then 
       Temp = Names(ComparisonNumber) 
       Names(ComparisonNumber) = Names(ComparisonNumber + 1) 
       Names(ComparisonNumber + 1) = Temp 
       Swapped = True 
      End If 
      ComparisonNumber = ComparisonNumber + 1 
     End While 
    End While 

    For i = 0 To PatientCount 
     lstPatientNames.Items.Add(Names(i)) 
     lstPatientHeights.Items.Add(Heights(i)) 
     lstPatientWeights.Items.Add(Weights(i)) 
    Next 

End Sub 
End Class 

의 범위를 벗어난하지만 배열을 정렬하고 표시하는 버튼을 누를 때 나는 오류 얻을 : 라인에 "index was outside the bounds of the array"버블 정렬 지수는이 프로젝트에 대한 내 버블 정렬 코드입니다 배열

If Names(ComparisonNumber) > Names(ComparisonNumber + 1) Then 

이유에 대한 의견이 있으십니까? 감사

답변

2

PatientCountNames에 저장되는 항목의 수 (당신이이 중 하나에 대한 정의를 표시하지했습니다) PatientCount - 1-0에서 Names 실행에 대한 다음 인덱스 인 경우. ComparisonNumberPatientCount - 1-동일

그래서, 마지막 반복에서, 당신은 인덱스 PatientCount - 1PatientCount에있는 항목에 액세스하려고 시도 -하지만 두 번째 인덱스가 잘못되었습니다.

lstPatientHeights.Items.Add(Heights(i)) 
    lstPatientWeights.Items.Add(Weights(i)) 

당신이 Heights하고 Names 정렬 된 동일한 방식으로 Weights 정렬되지 않았기 때문에, 그래서 그들은 여전히거야 :

Swapped = True 
While Swapped = True 
    Swapped = False 
    ComparisonNumber = 0 
    While ComparisonNumber < PatientCount - 1 'Changed here 
     If Names(ComparisonNumber) > Names(ComparisonNumber + 1) Then 
      Temp = Names(ComparisonNumber) 
      Names(ComparisonNumber) = Names(ComparisonNumber + 1) 
      Names(ComparisonNumber + 1) = Temp 
      Swapped = True 
     End If 
     ComparisonNumber = ComparisonNumber + 1 
    End While 
End While 

For i = 0 To PatientCount - 1 'And here 
    lstPatientNames.Items.Add(Names(i)) 
    lstPatientHeights.Items.Add(Heights(i)) 
    lstPatientWeights.Items.Add(Weights(i)) 
Next 

또한,이 라인은 잘못된 것 원래 순서대로. 스왑을 수행하기로 결정할 때 이들 모두에 동일한 스왑을 수행해야하거나 3 개의 속성 (Name, HeightWeight)을 가진 단일 (배열?)에 객체를 저장하고 이들 객체를 스왑해야합니다 .

+0

도움을 주셔서 감사합니다 – Marcel

+0

그러면 높이와 무게를 같은 배열에 저장하는 방법은 무엇입니까? – Marcel

+0

hiehgts 및 가중치를 동일한 배열에 저장할 수있는 방법이 있습니까? – Marcel