2014-01-27 4 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

Если PatientCount является количеством элементов, хранящееся в Names (вы не показаны определением для любого из них), то индексов для Names пробега от 0 до PatientCount - 1.

Так, в последней итерации, когда ComparisonNumber является равно к PatientCount - 1, вы пытаетесь получить доступ к детали на индексах PatientCount - 1 и PatientCount - но что второй индекс является недействительным.

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 

Кроме того, эти линии, кажется, не так:

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

Потому что вы не были сортировки Heights и Weights таким же образом, что вы были сортировочного Names, поэтому они будут по-прежнему в их первоначальном порядке. Вы либо должны выполнять одни и те же свопы ко всем этим, когда вы решите выполнить своп, или вы должны хранить объекты в одном (массив?), Которые имеют 3 свойства: Name, Height и Weight, а затем обменивать эти объекты ,

+0

благодарит за помощь – Marcel

+0

Итак, как бы я мог хранить высоту и вес в одном массиве? – Marcel

+0

есть ли способ хранения hiehhts и весов в том же массиве? – Marcel

Смежные вопросы