明星lv mini双肩包:vb 一个问题,请帮忙~

来源:百度文库 编辑:高校问答 时间:2024/04/28 22:57:46
做冒泡排序的时候,看到有人用了一个程序:
Private Sub Form_click()
Dim a(5)
For i = 1 To 5
a(i) = Int(Rnd * 100)
Next
Do Until flag
flag = 1
For i = 1 To 4
If a(i) > a(i + 1) Then
b = a(i)
a(i) = a(i + 1)
a(i + 1) = b
flag = 0
End If
Next
Loop
For Each x In a
Print x
Next
End Sub
但是,我不很明白do while flag用法
因为如果我把其中语句写成:
Do Until flag = 0
flag = 0
For i = 1 To 4
If a(i) > a(i + 1) Then
b = a(i)
a(i) = a(i + 1)
a(i + 1) = b
flag = 1
End If
Next
Loop
就错误了,请解释,谢谢~
中间应该是do until flag,谢谢

程序除了随机抽取没加上清洗代码外没有其它错误了!1楼说错了,不是死循环,而是根本没循环~~条件为true直接跳过循环了!

在程序里面,0表示“假”,1表示“真”,并且变量未赋值前表示“真”,等于flag=1,因此你刚开始用flag = 0当然不符合就被直接跳过循环了!你改为:Do Until flag = 1
flag = 1
For i = 1 To 4
If a(i) > a(i + 1) Then
b = a(i)
a(i) = a(i + 1)
a(i + 1) = b
flag = 0
End If
Next
Loop
就绝对没问题!
把下面的代码保存为VBS格式打开就会了解了!:
a=1
if a then msgbox "A=1表示真,所以通过IF条件"
b=0
if b then msgbox "B=0表示假,所以通不过IF条件"

当然错了,那样是个死循环,
do until 语句
Loop
的语义是,直到语句执行为真时退出,你那一直是until=1,until=0永远也不可能是真,就是死循环.

Do Until.....Loop
这语句属于DO循环结构
===============
Do Until 条件
循环体
[Exit Do]
Loop
==============
当条件为False时执行循环体,直到条件为True时终止
[Exit Do]为选用语句,这是退出这个结构
======
最上面的程序好像有问题