请问下那位大佬看看我这个求鞍点的程序为什么有问题
vb吧
全部回复
仅看楼主
level 1
幻月成灭 楼主
不知道为什么运行显示是下标越界,
Option Base 1
Private Sub Command1_Click()
Dim m As Integer, n As Integer, f As Boolean
m = InputBox("m")
n = InputBox("y")
ReDim A(m, n) As Integer
A(m, n) = Int(Rnd * 101)
f = True
For i = 1 To m
maxy = A(i, 1)
For j = 1 To n
If A(i, j) > Max Then
Max = A(i, j)
maxy = j
End If
Next j
For k = 1 To m
If A(k, maxy) < Max Then 下标越界黄色标注行
f = False
Exit For
Else
Print "A(" & Str(i) & ","; Str(maxy) & ")=" & A(i, maxy)
End If
Next k
Next i
If f = False Then Print "??а???"
End Sub
2020年06月19日 09点06分 1
level 15
数组中没有正确生成数据,除了最后一个元素(右下角那个)以外,其余都是0,Max和maxy的初始值也是0,这样在一行中循环之后,没有比0大的数(全是0),maxy也就没有被赋值,仍然是0,而数组下标是从1开始的,因此导致越界
2020年06月19日 12点06分 2
发现了,感谢
2020年06月20日 09点06分
吧务
level 13
Option Base 1 ' 数组下标从【1】开始
ReDim A(1 To m, 1 To n) As Integer ' 这才匹配
2020年06月19日 13点06分 3
如果希望数组下标从1开始,这两者使用其一即可:如果有了Option Base 1,定义数组时就不需要写1 To;如果没有Option Base 1,定义数组时就需要写1 To
2020年06月19日 13点06分
这个到不一定。VB 中有的数组从【0】开始,与【Option Base 1】语句无关。
2020年06月19日 13点06分
吧务
level 13
【A(m, n) = Int(Rnd * 101)】这一句应该是以下几行
Randomize
For i = 1 To m : For j = 1 To n
A(i, j) = Int(Rnd * 101)
Next j : Next i
2020年06月19日 13点06分 4
数组赋值错了,感谢
2020年06月20日 09点06分
level 7
我觉得你把maxy的值用在数组下标上本身就有可能越界 毕竟maxy可是0_100的随机正整数
2020年06月20日 01点06分 6
看了你这里的话,我才发现上面对maxy的解释有点错误,原来maxy的0不是未赋值的初始值,而是未赋值的数组第一个元素的值;当然楼主确实这里也写错了就是了
2020年06月20日 01点06分
才发现我对maxy的赋值语句有两条,我是单纯想把他作为纵坐标的,第一条语句应该是无意中打错了
2020年06月20日 09点06分
level 7
当然数据生成也有问题 不过我提出的也对吧[小乖]
2020年06月20日 01点06分 7
1