vb 下标越界问题
OptionBase1PrivateSubForm_Click()Dima(2321)AsIntegerSum=0b=0Fori=1To3570Forj=1250To35...
Option Base 1
Private Sub Form_Click()
Dim a(2321) As Integer
Sum = 0
b = 0
For i = 1 To 3570
For j = 1250 To 3570
If a(j) Mod i = 0 Then(这里显示下标越界)
Sum = Sum + 1
End If
Next j
Next i
If Sum = 2 Then
b = b + a(j)
End If
End Sub
是怎么回事啊 ? 展开
Private Sub Form_Click()
Dim a(2321) As Integer
Sum = 0
b = 0
For i = 1 To 3570
For j = 1250 To 3570
If a(j) Mod i = 0 Then(这里显示下标越界)
Sum = Sum + 1
End If
Next j
Next i
If Sum = 2 Then
b = b + a(j)
End If
End Sub
是怎么回事啊 ? 展开
3个回答
展开全部
显然楼主对数组的使用不熟悉吧
a(2321)数组中有从1-2321的下标范围内的 2321个元素的数组
Option Base 1 这句没必要 可以直接在声明的时候写成
dim a (1to 2321) as .....
For j = 1250 To 3570 省略了step 1
这个循环表示的执行次数是 (3570-1250 +1)/1 次 =2321 次 '楼主忽略的问题就在这里 执行次数不代表下标最大值因为循环的初值不一定是 1
当a数组的元素 为 a(j)的时候 在循环中
如果J= 2322的时候 a(j)= a(2322) 问题就在这上了 程序运行到这里
必须出错了....自己反思一下吧
下面还要补充另外的一个问题
还要补充一下 数组在使用的时候先要初始化 即给数组中各元素的赋第一个值 楼主的代码中没有初始数组的语句 对于J的单循环(不包括外循环I
) 最后计算出SUM和B的值 永远都是0 因为a(j) 无论J=多少 a(j) =0
通过上面的代码得到以下结论
因为没有对数组进行初始化 无论数组a 的下标j 是多少 a(j) 都=0
这段代码执行起来无任何实际意义和效果
而且I 和J都没有指定数据类型 即为Variant
VB处理 Variant类型数据是所有数据中最慢的 而且又计算了上百万次
哪怕执行几百次代码也不会看出多大区别的 正因为执行了N多次 所以才显示出效果 可想代码执行的效率不佳 速度很慢
如果有兴趣可以实验下 用Integer 和 Variant来执行不同的循环 看看运行速度的区别
应该把I 和 J的声明类型写上 改成
Dim i as integer ,j as integer 这样执行起来就会效率比较高
a(2321)数组中有从1-2321的下标范围内的 2321个元素的数组
Option Base 1 这句没必要 可以直接在声明的时候写成
dim a (1to 2321) as .....
For j = 1250 To 3570 省略了step 1
这个循环表示的执行次数是 (3570-1250 +1)/1 次 =2321 次 '楼主忽略的问题就在这里 执行次数不代表下标最大值因为循环的初值不一定是 1
当a数组的元素 为 a(j)的时候 在循环中
如果J= 2322的时候 a(j)= a(2322) 问题就在这上了 程序运行到这里
必须出错了....自己反思一下吧
下面还要补充另外的一个问题
还要补充一下 数组在使用的时候先要初始化 即给数组中各元素的赋第一个值 楼主的代码中没有初始数组的语句 对于J的单循环(不包括外循环I
) 最后计算出SUM和B的值 永远都是0 因为a(j) 无论J=多少 a(j) =0
通过上面的代码得到以下结论
因为没有对数组进行初始化 无论数组a 的下标j 是多少 a(j) 都=0
这段代码执行起来无任何实际意义和效果
而且I 和J都没有指定数据类型 即为Variant
VB处理 Variant类型数据是所有数据中最慢的 而且又计算了上百万次
哪怕执行几百次代码也不会看出多大区别的 正因为执行了N多次 所以才显示出效果 可想代码执行的效率不佳 速度很慢
如果有兴趣可以实验下 用Integer 和 Variant来执行不同的循环 看看运行速度的区别
应该把I 和 J的声明类型写上 改成
Dim i as integer ,j as integer 这样执行起来就会效率比较高
展开全部
a(2321) 定义了数组长度,下标越界处索引超出了长度。
并且数组a没有初值,为不确定对象。
并且数组a没有初值,为不确定对象。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Dim a(2321) As Integer
改成
Dim a(3570) As Integer
改成
Dim a(3570) As Integer
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询