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

是怎么回事啊 ?
展开
 我来答
Kid_Loo
2008-12-13 · TA获得超过1116个赞
知道小有建树答主
回答量:184
采纳率:0%
帮助的人:0
展开全部
显然楼主对数组的使用不熟悉吧

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 这样执行起来就会效率比较高
home20010252
2008-12-13 · TA获得超过3319个赞
知道大有可为答主
回答量:1147
采纳率:0%
帮助的人:1188万
展开全部
a(2321) 定义了数组长度,下标越界处索引超出了长度。
并且数组a没有初值,为不确定对象。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
朱朱飞侠航拍
2008-12-13 · TA获得超过1075个赞
知道小有建树答主
回答量:966
采纳率:85%
帮助的人:432万
展开全部
Dim a(2321) As Integer
改成
Dim a(3570) As Integer
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式