作者:杜勇
描述:循环语句,有两种变形,一种是当条件为True时,重复执行一个语句块中的命令。另一种重复执行一个语句块中的命令,直到条件变为True时。
一、语法:
Do[{While|Until}condition]
[statements]
[Exit Do]
[statements]
Loop
或者可以使用下面这种语法:
Do
[statements]
[Exit Do]
[statements]
Loop[{While|Until}condition]
Do...Loop语句的语法包含下面部分:
|
部分 |
描述 |
| While | 关键字,可选。当条件为True时,重复执行一个语句块中的命令。 |
| Until | 关键字,可选。重复执行一个语句块中的命令,直到条件变为True时。While和Until只能选择一个。 |
| condition | 可选参数。数值表达式或字符串表达式,其值为True或False。如果condition是Null,则condition会被当作是False。当condition为True时,执行Do While循环或从Do Until循环跳出。 |
| statements | 一条或多条命令,它们将被重复执行。 |
| Exit Do | 可选。当statements包含条件且条件满足时退出循环。 |
二、说明:
一般来讲,While和Until只能而且必须选择一个。如果不选,将进入无限循环,这时只能用Exit Do语句跳出循环。
在Do…Loop中可以在任何位置放置任意个数的Exit Do语句,随时跳出Do…Loop循环。Exit Do通常用于条件判断之后,当满足条件后,Exit Do语句将控制权转移到紧接在Loop命令之后的语句。
Do…Loop也可以采用嵌套方式。如果Exit Do使用在嵌套的Do…Loop语句中,则Exit Do会将控制权转移到Exit Do所在位置的外层循环。
注意:两种Do…Loop语句运行方式是不同的。
Do[{While|Until}condition]
[statements]
Loop
采用这种循环,程序先判断条件,若条件满足,执行语句块中的命令,否则退出循环。
Do
[statements]
Loop[{While|Until}condition]
采用这种循环,程序先执行语句块中的命令,然后判断条件,若条件满足,重复执行语句块中的命令,否则退出循环。因此在此循环中,至少要执行一次语句块中的命令。
三、应用举例:
本示例示范如何使用Do...Loop语句。建立一个标准工程,在窗体上添加两个命令按钮,将下面的程序粘贴过去。
Private Sub Command1_Click()
Dim Check As Boolean, Counter As Integer
Check = True: Counter = 0 '设置变量初始值。
Do '外层循环。
Do While Counter < 20 '内层循环。
Counter = Counter + 1 '计数器加一。
If Counter = 10 Then '如果条件成立。
Check = False '将标志值设成False。
Exit Do '退出内层循环。
End If
Loop
Loop Until Check = False '退出外层循环。
MsgBox "Counter=" & Counter & ";Check=" & Check
End Sub
Private Sub Command2_Click()
Dim Check As Boolean, Counter As Integer, I As Integer
Check = True: I = 0 '设置变量初始值。
Do Until Check = False '外层循环
Counter = 0
Do While Counter < 20 '内层循环。
Counter = Counter + 1 '计数器加一。
Loop
I = I + 1
If I = 10 Then Check = False '如果条件成立。将标志值设成False。
Loop
MsgBox "Counter=" & Counter & ";I=" & I & ";Check=" & Check
End Sub
单击命令按钮1,内层的Do...Loop语句循环到第10次时将标志值设置为False,并用ExitDo语句强制退出内层循环。外层循环则在检查到标志值为False时,马上退出。MsgBox显示“Counter=10;Check=False。”
单击命令按钮2,内层的Do...Loop语句循环到第20次时退出内层循环。外层的Do...Loop检测I=10时退出外层循环。MsgBox显示“Counter=20;I=10;Check=False。”