vb下标越界

OptionBase1PrivateSubCommand1_Click()Dims()AsIntegerDimi%,n%,k%,ave!n=Val(Text1.Text)... Option Base 1
Private Sub Command1_Click()
Dim s() As Integer
Dim i%, n%, k%, ave!
n = Val(Text1.Text)
ReDim s(n)(运行时这里显示下标越界)
For i = 1 To n
s(i) = Int(101 * Rnd)
Picture1.Print s(i);
k = k + s(i)
Next i
ave = k / n
Text2.Text = Str(ave)

End Sub
展开
 我来答
43295811
2008-09-18 · TA获得超过1529个赞
知道大有可为答主
回答量:1701
采纳率:0%
帮助的人:2046万
展开全部
首先你用了这句:Option Base 1 也就是数组的最小标是 1 ,如果出现 a(0) 那就会越界了!
往下看,你用了这句: n = Val(Text1.Text) ,就是说,如果文本框text1的内容为空或者不是数字的话,n就=0,当n=0时,你再redim a(0),那么就会下标越界了!当n>0时,程序没任何问题!

结论是:为了不出现这种错误,可以有下面两种修改:
1: 去掉 Option Base 1
2: 判断n的值 ,当n=0时,退出程序,不做任何动作!!

-----------------------------------------

哦,你要求平均值那作为分母的n当然不能=0
你就判断n值吧,当n=0 时退出程序
在n=val(text1.text) 这句下面加一句: if n=0 then exit sub 其他代码不变
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gujin170
2008-09-18 · TA获得超过937个赞
知道小有建树答主
回答量:1030
采纳率:66%
帮助的人:344万
展开全部
v

运行的时候
text1里面只能输入数字!!

如果是 Text1 或者 其他字符,肯定错阿!

你可以这样:

Option Base 1
Private Sub Command1_Click()
Dim s() As Integer
Dim i%, n%, k%, ave!
n = Val(Text1.Text)
ReDim s(n) '(运行时这里显示下标越界)
For i = 1 To n
s(i) = Int(101 * Rnd)
Picture1.Print s(i);
k = k + s(i)
Next i
ave = k / n
Text2.Text = str(ave)
End Sub

Private Sub Form_Load()
Text1 = ""
Text2 = ""
End Sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
湘湖泛舟
2008-09-18 · TA获得超过1076个赞
知道大有可为答主
回答量:833
采纳率:0%
帮助的人:899万
展开全部
Dim s() As Integer 只是定义了一个数组,并没有指出该数组有多大的容量,所以此句中只是定义了一个没有容量的数组,其中一个项都没有,所以当您为其中某项赋值时,就会超过它的下标.

您可以定义Dim s(100) As Integer试试看,这样定义后,您有S(0)-S(100)共101个项可以用,在这个区间里不会下标越界,当您为S(101)赋值时,就又会出现下标越界错误 了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式