vb数组题,想知道为什么错了

来源:百度知道 编辑:UC知道 时间:2024/09/27 05:46:35
要在数组中查找元素,二分法吧,我写的如下一运行就死机,到底那里错了?
Option Base 1
Private Sub Command1_Click()
Dim k As Integer, i As Integer, low As Integer, high As Integer, midd As Integer
Dim a(20) As Integer
Dim flag As Boolean
For i = 1 To 20
a(i) = 3 * i + 1'随便写的一个单调增函数
Print a(i);
Next i
Print
k = Val(Text1.Text)
flag = False
low = 1
high = 20
Do While low <= high
midd = (low + high) \ 2
Select Case k
Case k = a(midd)
flag = True
Exit Do
Case k < a(midd)
high = midd - 1
Case k > a(midd)
low = midd + 1
End Select
Loop
If flag Then
Print "第"; midd; "个是"; k
Else
Print "找不到"
End If
End Sub

Dim k As Integer, i As Integer, low As Integer, high As Integer, midd As Integer
Dim a(20) As Integer
Dim flag As Boolean
For i = 1 To 20
a(i) = 3 * i + 1 '随便写的一个单调增函数
Print a(i);
Next i
Print
k = val(text1)
flag = False
low = 1
high = 20
Do While low <= high
midd = (low + high) \ 2
Select Case k
Case a(midd)
flag = True
Exit Do
Case Is < a(midd)
high = midd - 1
Case Is > a(midd)
low = midd + 1
End Select
Loop
If flag Then
Print "第"; midd; "个是"; k
Else
Print "找不到"
End If
就好了。case后面的表达式里如果写k=a(midd)的话,就会得到0或1,再拿这个数和k比较,很明显,k不等于0和1。所以会形成死循环

Private Sub Command1_Click()
Dim k As Integer, i As Integer, low As Integer, high As Integer, midd As Integer
Dim a(20) As Integer
Dim flag As Boolean
For i = 1 To 20
a(i) = 3 * i + 1 '随便写的一个单调增函数
Print a(i);
Next i