首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

帮小弟我查找出错原因,100分贴

2012-05-24 
帮我查找出错原因,100分贴VB codePrivate Sub Command16_Click()Dim m As Integer, i As Integer, j As In

帮我查找出错原因,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呢?
[解决办法]
探讨

VB code


[size=12px]Private Sub Command16_Click()
Dim m As Integer, i As Integer, j As Integer, x As Integer, to_tal As Integer, f As Boolean

Dim a(1 To 8) As Integer
a(1) = 80: a(4) = 7: a(7) = 3……

[解决办法]
你为什么要这样写程序阿,不就是找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对比然后对循环界限作出调整是没有逻辑可循的。没有办法给你一个合适的答案。 
你拿着这道题去找出题人问问到底要考什么

热点排行