Arrays 气泡排序索引超出了数组的界限

Arrays 气泡排序索引超出了数组的界限,arrays,vb.net,sorting,Arrays,Vb.net,Sorting,你知道为什么吗? 谢谢如果PatientCount是存储在Names中的项目数(您没有显示其中任何一个的定义),则名称的索引从0运行到PatientCount-1 因此,在上一次迭代中,当ComparisonNumber等于PatientCount-1时,您尝试访问索引PatientCount-1和PatientCount处的项,但第二个索引无效 If Names(ComparisonNumber) > Names(ComparisonNumber + 1) Then 因为您对高度和权重

你知道为什么吗?
谢谢

如果
PatientCount
是存储在
Names
中的项目数(您没有显示其中任何一个的定义),则
名称的索引从0运行到
PatientCount-1

因此,在上一次迭代中,当
ComparisonNumber
等于
PatientCount-1
时,您尝试访问索引
PatientCount-1
PatientCount
处的项,但第二个索引无效

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

因为您对
高度
权重
的排序方式与对
名称
的排序方式不同,所以它们仍将保持原始顺序。当您决定执行交换时,您应该对所有这些对象执行相同的交换,或者您应该将对象存储在具有3个属性的单个(数组?)中—
Name
高度
重量
,然后交换这些对象。

那么我如何将高度和重量存储在同一个数组中?有没有办法将高度和重量存储在同一个数组中?@Marcel-您可以创建一个包含3个
属性
-名称、高度和重量,使用当前存储在数组中的这些项的任何数据类型。然后将此类的对象存储在数组中。
If Names(ComparisonNumber) > Names(ComparisonNumber + 1) Then
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))