回 帖 发 新 帖 刷新版面

主题:请求帮助,很着急~~

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个回复)

沙发

你定义的数组大小为2,那么有效下标应该是0-1或者1-2,你现在0-2了么肯定要出问题了。
一般情况下是0-1的,如果要以1为起始下标可以用语句设置的。

板凳

一楼说的不对。

Dim k%(2)默认是从0到2,共三个元素。

我也看到下标越界,不过不是在你说的位置,也不是你说的参数!
因为你提供的代码不完整,且没有运行时数组的初始值。我只好自己设定一些。
测试的结果是:
第6行代码( k(i) = k(i) + t(i, j))下标越界,越界时,i=0,j=0
我认为在于下标的维数。

正确的测试,等待你的完整代码和初始参数。

3 楼

这是因为你没有定义局部变量i,所以程序将i当作了全局变量,当从函数cs返回时,i=3,所以下标越界。

4 楼

秋水阿,我怎么记得,不声明的时候,直接引用的变量默认是过程级的?

       另外,我总看着他这些函数之间的关系不清晰?

5 楼

如果是过程级定义了,引用的才是过程级吧,范围小的覆盖范围大的。

6 楼

呵呵,老大说得对,不声明的时候,直接引用的变量默认是过程级的。
不过这些代码确实混乱不堪,令人不知所云。大部份变量或数组都没有声明,这不是好习惯。

7 楼

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 楼

1、 faj = m()    写法不对,缺少参数


2、Next i
  cs = Oi(i)  此处,不越界才怪!关于i的循环正常完成后,i当然大于其终值!难道你不知道“在循环外引用循环变量,会导致不可知问题”吗?


3、就那几个破数据,还要分三个文件来记载?每个都占用1K的空间!

9 楼

4、
While Not EOF(2)
    For j = 0 To 2
        Input #2, gha(j)
    Next j
Wend
这样的eof函数有什么用?只是不读取空文件而已!如果文件里只有两个数据,你照样出错!

10 楼

6、你的那几个function根本就执行不到,从来就没有被任何事件调用!

我来回复

您尚未登录,请登录后再回复。点此登录或注册