在'如果aryTemp(1)< aryTemp2(1)然后
出现指数超出了界限 阵列。
错误。无法确定为什么它会在数组范围之外。 基本上尝试比较姓氏以对记录进行排序并将其放回列表框中。
学生记录如下: 姓[空格]名字[空格]主要[空间]电话[空格]电子邮件[空格] GPA
示例:Johny Cake E201 6666666666 me@me.com 1.0
Private Sub btnAscending_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAscending.Click
''#load all students into array
Dim arySort(numberOfRecords) As String
Dim aryTemp(6) As String
Dim aryTemp2(6) As String
For i = 0 To numberOfRecords - 1
arySort(i) = lstListBox.Items(i)
Next
Dim temp As String ''#holds temporary record
Dim k As Integer
For i = 0 To arySort.Length - 2
aryTemp = Split(arySort(i), " ")
For k = i + 1 To arySort.Length - 1
aryTemp2 = Split(arySort(k), " ")
If aryTemp(1) < aryTemp2(1) Then ''# index of 1 refers to last name of a split string
temp = arySort(k)
arySort(k) = arySort(i)
arySort(i) = temp
End If
Next
Next
lstListBox.Items.Clear()
numberOfRecords = 0
isLoaded = False
For i = 0 To arySort.Length - 1
lstListBox.Items.Add(arySort(i))
numberOfRecords += 1
Next
currentRecord = 0
isLoaded = True
End Sub
答案 0 :(得分:2)
VB.NET中的数组是从零开始的,因此您的代码为每个数组声明了太多项。如上所述,arySort将为ListBox中的每个记录包含一个项目, plus 一个额外的空项目。这将导致你的一个aryTemp2 = Split(arySort(k),“”)调用分裂为Nothing,这将使你在aryTemp2数组中没有任何足够的项目与aryTemp进行比较。
更正后的代码:
Dim arySort(numberOfRecords - 1) As String
Dim aryTemp(5) As String
Dim aryTemp2(5) As String
答案 1 :(得分:0)
这是因为您要与aryTemp2
中的第二项(索引1
中的项目)进行比较,但aryTemp2
包含1或0个元素。看起来你期望Split(arySort(k), " ")
返回一个包含比实际更多元素的数组。您应该在比较之前检查数组的维度,或者验证arySort(k)
是否包含至少一个空格(以确保arySort2
中至少包含两个元素)。
答案 2 :(得分:0)
尝试If aryTemp(aryTemp.Length - 1) < aryTemp2(aryTemp2.Length - 1) Then
,但确实遵循了姓氏不能有空格的假设。如果不是这种情况,则可以更多地构建代码以处理这种情况。
答案 3 :(得分:0)
如果您使用的是Visual Studio 2008或更高版本,则可以使此更多更简单:
Private Sub btnAscending_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAscending.Click
Dim arySort = lstListBox.Items.OrderBy(Function(s) s.Split(" "c)(1)).ToArray()
lstListBox.Clear()
lstListBox.AddRange(arySort)
currentRecord = 0
isLoaded = True
End Sub
我不建议将其转入,因为它超出了教授对此任务的期望。此外,它与您不检查的原始代码具有相同的问题,以确保字符串中确实存在要拆分的空间。但是把它想象成你应该拍摄的东西。