主题:请求帮助,很着急~~
qcfy1111
[专家分:0] 发布于 2008-05-20 15:44:00
Public Function cs(t() As Integer)
Dim k%(2)
For i = 0 To 2
k(i) = 0
For j = 0 To 2
k(i) = k(i) + t(i, j)
Next j
O(i) = k(i)
Next i
cs = O(i)
End Function
Function fgi(t() As Integer)
Dim n#(2), O#(2)
For i = 0 To 2
For j = 0 To 2
n(i) = cs(t%()) / gho(i)
为什么说这个语句下表越界~~运行后调试,鼠标靠近i,显示i=3是怎么回事?完全不明白啊
next j
Next i
fgi = n()
End Function
我是新手着急要用这个程序,请大家多帮忙拉,谢谢~~
回复列表 (共16个回复)
沙发
p1s [专家分:4100] 发布于 2008-05-20 18:16:00
你定义的数组大小为2,那么有效下标应该是0-1或者1-2,你现在0-2了么肯定要出问题了。
一般情况下是0-1的,如果要以1为起始下标可以用语句设置的。
板凳
老大徒伤悲 [专家分:29120] 发布于 2008-05-20 20:32:00
一楼说的不对。
Dim k%(2)默认是从0到2,共三个元素。
我也看到下标越界,不过不是在你说的位置,也不是你说的参数!
因为你提供的代码不完整,且没有运行时数组的初始值。我只好自己设定一些。
测试的结果是:
第6行代码( k(i) = k(i) + t(i, j))下标越界,越界时,i=0,j=0
我认为在于下标的维数。
正确的测试,等待你的完整代码和初始参数。
3 楼
一江秋水 [专家分:9680] 发布于 2008-05-21 07:25:00
这是因为你没有定义局部变量i,所以程序将i当作了全局变量,当从函数cs返回时,i=3,所以下标越界。
4 楼
老大徒伤悲 [专家分:29120] 发布于 2008-05-21 09:03:00
秋水阿,我怎么记得,不声明的时候,直接引用的变量默认是过程级的?
另外,我总看着他这些函数之间的关系不清晰?
5 楼
我是大喊三 [专家分:3010] 发布于 2008-05-21 20:48:00
如果是过程级定义了,引用的才是过程级吧,范围小的覆盖范围大的。
6 楼
一江秋水 [专家分:9680] 发布于 2008-05-22 07:25:00
呵呵,老大说得对,不声明的时候,直接引用的变量默认是过程级的。
不过这些代码确实混乱不堪,令人不知所云。大部份变量或数组都没有声明,这不是好习惯。
7 楼
qcfy1111 [专家分:0] 发布于 2008-05-23 11:04:00
Option Explicit
Dim t(2, 2) As Integer
Dim gho%(2), gha(2) As Integer
Dim i%, j%, Oi%(2), Aj%(2)
Private Sub Command1_Click()
Open "d:\111.txt" For Input As #1 读取一个三行三列的数据
Do While Not EOF(1)
For i = 0 To 2
For j = 0 To 2
Input #1, t(i, j)
Next j
Next i
Loop
Close #1
Open "d:\gha.txt" For Input As #2
While Not EOF(2)
For j = 0 To 2
Input #2, gha(j)
Next j
Wend
Close #2
Open "d:\gho.txt" For Input As #3
While Not EOF(3)
For i = 0 To 2
Input #3, gho(i)
Next i
Wend
Close #3
End Sub
Public Function cs(t() As Integer) 此段程序求得各行的和
Dim k%(2), Oi%(2)
For i = 0 To 2
k(i) = 0
For j = 0 To 2
k(i) = k(i) + t(i, j)
Next j
Oi(i) = k(i)
Next i
cs = Oi(i) [color=FF0000]此处下标越界,仍然显示i=3[/color]
End Function
Public Function xy(t() As Integer) 此段求得各列的和
Dim l%(2), Aj%(2)
For j = 0 To 2
l(j) = 0
For i = 0 To 2
l(j) = l(j) + t(i, j)
Next i
Aj(j) = l(j)
Next j
xy = Aj(j)
End Function
Public Function faj(t() As Integer)
Dim m#(2)
For j = 0 To 2
m(j) = xy(t%()) / gha(j)
Next j
faj = m() [color=0000FF] 函数的返回值是数组的时候,这样写对么?[/color]
End Function
Function fgi(t() As Integer)
Dim n#(2)
For i = 0 To 2
For j = 0 To 2
n(i) = cs(t%()) / gho(i)
Next j
Next i
fgi = n()
End Function
这是自定义函数部分的程序,测试时数据t(i,j)就用二维的整数数组
很感谢你的帮助~~
8 楼
老大徒伤悲 [专家分:29120] 发布于 2008-05-23 12:18:00
1、 faj = m() 写法不对,缺少参数
2、Next i
cs = Oi(i) 此处,不越界才怪!关于i的循环正常完成后,i当然大于其终值!难道你不知道“在循环外引用循环变量,会导致不可知问题”吗?
3、就那几个破数据,还要分三个文件来记载?每个都占用1K的空间!
9 楼
老大徒伤悲 [专家分:29120] 发布于 2008-05-23 12:21:00
4、
While Not EOF(2)
For j = 0 To 2
Input #2, gha(j)
Next j
Wend
这样的eof函数有什么用?只是不读取空文件而已!如果文件里只有两个数据,你照样出错!
10 楼
老大徒伤悲 [专家分:29120] 发布于 2008-05-23 12:24:00
6、你的那几个function根本就执行不到,从来就没有被任何事件调用!
我来回复