VB下标越界问题,改错!!各位高手来救我啊!

来源:百度知道 编辑:UC知道 时间:2024/06/15 14:56:41
Option Explicit
Private Sub Command1_Click()
Dim m!, n!, a!, i!, b!, j!, c

m = InputBox("请输入一个整数m:", "输入数据", 10, 2000, 2000)
n = InputBox("请输入一个整数n(n<=m)", "输入数据", 10, 2000, 2000)
ReDim aa(1 To m) As Single, bb(1 To n) As Single
a = 1
For i = 1 To m
a = a * i
aa(i) = a
Next i

b = 1
For j = 1 To n
b = b * j
bb(j) = b
Next j

c = aa(i) / (bb(j) * (m - n))
End Sub

Private Sub Label2_Click()
Label2.Caption = m
End Sub

Private Sub Label3_Click()
Lebel3.Caption = n
End Sub

Private Sub Label4_Click()
Label4.Caption = c
End Sub

这个是我写的程序,我还是初学者
编写的程序有关于求排列组合问题
请各位指教啊!!!

For j = 1 To n
b = b * j
bb(j) = b
Next j
当你这段执行完了后,j=n+1,同理,i=m+1了
而你定义的的 bb(1 To n) ,最后c = aa(i) / (bb(j) * (m - n)) 相当于是c = aa(i+1) / (bb(j+1) * (m - n)) .所以当然是越界了.
把c = aa(i) / (bb(j) * (m - n)) 改为
c = aa(i-1) / (bb(j-1) * (m - n)) 好了

一楼正解;还有的是:
这程序有问题吧??
Dim m!, n!, a!, i!, b!, j!, c 应该放在声明。
要不怎样执行
Private Sub Label3_Click()
Lebel3.Caption = n
End Sub ?
b = 1 放在顶端比较合规范。

c = aa(i) / (bb(j) * (m - n))
程序运行到这一句时,i=m+1,j=n+1,都超过了定义的数组的上限。应该改为:
c = aa(i-1) / (bb(j-1) * (m - n))