VB.Net "Index was outside the bounds of the array." 尝试递增数组元素时
VB.Net "Index was outside the bounds of the array." when trying to increment Array element
我有一个记录数组,定义如下:
Structure TNumTemp
Dim BKA As String
Dim Num As Integer
Dim Name As String
End Structure
Dim Tarray(LOF(2) / Len(LocationRecord) - 1) As TNumTemp
当我尝试使用 Tarray(i).Num = Tarray(i).Num + 1 增加 Tarray(i).Num 时,我得到了标题中提到的错误因为某些原因!这是相关代码:
For i = 1 To LOF(2) / Len(LocationRecord)
FileGet(2, LocationRecord, i)
Tarray(i - 1).Name = Trim(LocationRecord.LocationName)
Tarray(i - 1).Num = 0
For j = 1 To LOF(3) / Len(TournamentRecord)
FileGet(3, TournamentRecord, j)
If Trim(TournamentRecord.LocationName) = Trim(Tarray(i - 1).Name) Then
Tarray(i).Num = Tarray(i).Num + 1
End If
Next
Next
根据我的理解,数组的边界是指数组中元素的数量?但是赋值的是数组的一个元素,而是其中一个结构体的一个元素!?
您创建了一个长度为 n-1 的数组
Dim arr(n - 1) As Integer
但是你循环直到 n
arr(n) = 10 ' This will not work because you are above the array length
初始化数组时删除-1。或者循环直到数组结束
For i = 1 To Tarray.Length-1
您声明数组的元素索引为 0 到 (LOF(2) / Len(LocationRecord) - 1)。遍历所有索引值的最常见方法是编码
For i = 0 To LOF(2) / Len(LocationRecord) - 1
但是你编码了
For i = 1 To LOF(2) / Len(LocationRecord)
在大多数情况下,您通过使用 (i-1) 而不是 (i) 作为循环内的数组索引来弥补这一点,但在出现错误的语句中您没有这样做。最后一次循环,i 将是 (LOF(2) / Len(LocationRecord)),它比最后一个数组索引多一个。您需要将问题陈述更改为
Tarray(i - 1).Num = Tarray(i - 1).Num + 1
我有一个记录数组,定义如下:
Structure TNumTemp
Dim BKA As String
Dim Num As Integer
Dim Name As String
End Structure
Dim Tarray(LOF(2) / Len(LocationRecord) - 1) As TNumTemp
当我尝试使用 Tarray(i).Num = Tarray(i).Num + 1 增加 Tarray(i).Num 时,我得到了标题中提到的错误因为某些原因!这是相关代码:
For i = 1 To LOF(2) / Len(LocationRecord)
FileGet(2, LocationRecord, i)
Tarray(i - 1).Name = Trim(LocationRecord.LocationName)
Tarray(i - 1).Num = 0
For j = 1 To LOF(3) / Len(TournamentRecord)
FileGet(3, TournamentRecord, j)
If Trim(TournamentRecord.LocationName) = Trim(Tarray(i - 1).Name) Then
Tarray(i).Num = Tarray(i).Num + 1
End If
Next
Next
根据我的理解,数组的边界是指数组中元素的数量?但是赋值的是数组的一个元素,而是其中一个结构体的一个元素!?
您创建了一个长度为 n-1 的数组
Dim arr(n - 1) As Integer
但是你循环直到 n
arr(n) = 10 ' This will not work because you are above the array length
初始化数组时删除-1。或者循环直到数组结束
For i = 1 To Tarray.Length-1
您声明数组的元素索引为 0 到 (LOF(2) / Len(LocationRecord) - 1)。遍历所有索引值的最常见方法是编码
For i = 0 To LOF(2) / Len(LocationRecord) - 1
但是你编码了
For i = 1 To LOF(2) / Len(LocationRecord)
在大多数情况下,您通过使用 (i-1) 而不是 (i) 作为循环内的数组索引来弥补这一点,但在出现错误的语句中您没有这样做。最后一次循环,i 将是 (LOF(2) / Len(LocationRecord)),它比最后一个数组索引多一个。您需要将问题陈述更改为
Tarray(i - 1).Num = Tarray(i - 1).Num + 1