帮我查找出错原因,100分贴
- VB code
Private Sub Command16_Click()Dim m As Integer, i As Integer, j As Integer, x As Integer, to_tal As Integer, f As BooleanDim a(1 To 8) As Integera(1) = 80: a(4) = 7: a(7) = 33a(2) = 10: a(5) = 8: a(8) = 50a(3) = 100: a(6) = 30f = False: x = 50: i = 1: j = 8: to_tal = 0Do While i <= j And f = False 'i <= j to_tal = to_tal + 1 'to_tal报错为:溢出 to_tal= 32767 m = (i + j) \ 2 If a(m) = x Then f = True Else If x < a(m) Then j = m - 1 Else m = m + 1 End If End IfLoopIf f = True ThenLabel5.Caption = totalElse Label5.Caption = "找不到该数据"End IfEnd Sub
[解决办法]
在你的这段程序中。
- VB code
Do While i <= j And f = False ' 退出循环的条件是i<j,f=false,在你的程序中,i值不变,你希望J值变化。 to_tal = to_tal + 1 ' 累加 m = (i + j) \ 2'此时m=4 If a(m) = x Then'a(m)即 a(4)是7,不等于x(50) f = True Else'跳转到这里 If x < a(m) Then'x>a(4) j = m - 1 Else'跳转到这里 m = m + 1‘m=5'进行下一次循环, End If End IfLoop’继续循环,
[解决办法]
你一步一步看看不就知道了么
你的m=4; a(4)=7; 然后 x<a(4)不成立;结果就是m=m+1. 这样就进入了下一次循环,但是i, j的值都不改变,这样你的total自然就溢出了
你在x<a(m)的情况下改变j,但是else里面你没有改变i或者j;是不是想改变i=m+1呢?
[解决办法]
[解决办法]
你为什么要这样写程序阿,不就是找50么
for i=1 to 8
total=total+1
if a(i)=x then
f=true
如果你就是想找到第一次出现50的话就在这里
exit for
end if
next
这样最多找8次,你给的程序片断没什么逻辑可循
[解决办法]
二分查找的前提是,你的数据已经排序好吧?你现在这种情况,数据排序了么?
[解决办法]
二分法的前提是你的数组已经排序完毕了,你这个情况根本不能二分法查啊
[解决办法]
Dim m As Integer, i As Integer, j As Integer, x As Integer, to_tal As Integer, f As Boolean
Integer全部改为long
[解决办法]
你给出来的数组和这段代码没有直接逻辑关系
If x < a(m) Then
j = m - 1
Else
m = m + 1
你的数组是没有规律的,那么你用数组里面的值和目标值x对比然后对循环界限作出调整是没有逻辑可循的。没有办法给你一个合适的答案。
你拿着这道题去找出题人问问到底要考什么