我正在尝试实施BubbleSort。但是,我得到一个数组越界错误;这发生在第三行。有人可以向我解释出现了什么问题吗?
For i As Integer = 0 To marks.Length Step 1
For x As Integer = 0 To marks.Length - 1 Step 1
If marks(x) > marks(x + 1) Then <<< "this where the problem is"
temp = marks(x + 1)
marks(x + 1) = marks(x)
marks(x) = temp
End If
Next x
Next i
For a As Integer = 0 To marks.Length
MsgBox(marks(a))
Next
答案 0 :(得分:0)
看起来你有一个一个接一个的问题。 x将从0变为marks.Length-1
,但在第三行,您尝试获取marks(x + 1)
。但是,只要x达到marks.Length - 1
的最大值,就会计算为marks( x + 1 )
== marks( (marks.Length - 1) + 1 )
== marks( marks.Length )
- 这确实超出范围。
第二行中的For
循环应使用marks.Length - 2
免责声明:如果进行此更改,请添加测试以验证冒泡排序是否仍适用于边缘情况。如果没有,你可能需要进一步调整算法。