上节课程我们一起学习了循环语句中的For循环,For循环的特点是已知循环次数,那么对于某些情况下,难以确定循环的具体次数,但是已知循环条件时,常常使用Do...Loop循环语句。
Do...Loop循环语句具有4种形式,分别是Do While...Loop,Do...Loop While,Do Until...Loop,以及Do...Loop Until。
1,Do While...Loop 语法格式如下:Do While [Exit Do]Loop
解析:
当程序执行到Do While ...Loop语句时,首先判断循环条件是否满足,如果条件不满足则不执行循环语句下的循环体;如果条件满足,即循环条件为True时,执行循环体。循环体内如果没有Exit Do语句强制退出循环,那么程序将回到循环开始处重复上面的步骤,直到循环条件不满足,或者循环体内有Exit Do强制退出语句。
用白话文来描述Do While...Loop语句,可以理解为:当条件满足时,
做什么什么,
循环以上步骤
根据以上说明,可以看出来,Do While...Loop循环语句,其特点是每次执行循环体前先判断循环条件,然后根据条件是否满足决定是否执行循环体和是否退出循环。因此有可能出现循环体一次未执行的情况。
举例: 目标: 使用Do While...Loop语句计算1到100的所有整数和值。 程序界面如下图所示: 代码如下:Private Sub Command1_Click() Dim i%, sum As Long Do While i <= 100 sum = sum + i i = i + 1 Loop Print sumEnd Sub
2, Do...Loop While
语法格式:
Do [Exit Do]Loop While
解析:
当程序执行到Do...Loop While语句时,首先执行一次循环体,如果循环体内有Exit Do强制退出语句则退出该循环,否则判断循环条件是否满足,如果条件不满足,则退出该循环,如果条件满足则回到循环开始处继续重复上面的步骤。
用白话文来描述,可以理解为:做什么什么
当条件满足时,循环以上步骤
可以看出,Do...Loop While循环的特点是,先执行一次循环体,然后再判断循环条件,因此该循环体一定会被执行至少一次。在解决某些问题时,需要循环体被执行至少一次,那么就需要用到该循环语句。 举例: 目标: 输入一个正整数,然后计算1到该数之间的所有整数和值。 程序界面如下图所示:Private Sub Command1_Click() Dim i%, v%, sum As Double v = Val(Text1.Text) Do i = i + 1 sum = sum + i Loop While (i < v) Print sumEnd Sub
3, Do Until...Loop
语法格式:
Do Until 循环体 [Exit Do]Loop
解
析:
当程序执行到该循环语句时,首先判断循环条件,当循环条件值为真时,则结束循环,当循环条件值为假时,则执行循环体。如果循环体内有Exit Do则强制退出循环,如果没有则继续循环重复上面的步骤。
可以看出Do Until...Loop与Do while...Loop的语句结构类似,不同之处在于,前者是在循环条件为False时执行循环体,而后者是在循环条件为True时执行循环体。或者说,两者结束循环的条件是刚好相反,前者需循环条件为真时,结束循环,而后者则是循环条件为假时结束循环。
4,Do...Loop Until 语法格式:Do 循环体 [Exit Do]Loop Until
同上面的循环语句一样,该循环语句与Do...Loop While循环语句也是语法结构一致,但结束循环的方式刚好相反。Do...Loop While是循环条件为假时结束循环,而Do...Loop Until则恰恰相反,是循环条件为真时结束循环。
死循环:
相比于For循环,本节课程学习的4种Do循环,非常容易出现死循环,尤其作为学习VB不久的小伙伴,因此在使用Do循环时,一定要注意避免造成死循环,因为死循环并不违背语法格式,因此程序在编译时不会报错。
如何避免死循环:1,循环条件通常是一个表达式,其结果是可以变化的,既可以是True也可以是Fasle,且在循环体内应该要去改变循环条件,以使得程序在执行有限步骤后,循环能够退出。比如本节课程第一个例子,求1-100之间的整数和,如果循环体中没有i=i+1语句,那么循环条件就永远不会改变,程序就会一直循环下去。
2,如果循环条件一直不会变化,那么可以在循环体中加入Exit Do来强制退出循环,可以使用If判断语句,当条件满足时执行Exit Do来强制退出循环。比如:
Do While(1) '循环条件为1,表示循环条件永远满足 i=i+1 sum=sum+1 if i>100 then Exit Do end ifLoop
3,可以在循环体中加入Do Events,来转让控制权,以便让操作系统处理其它事件。如果没有Do Events语句,那么计算机将会一直在执行循环内容,不会执行和相应其它操作,比如用户点击按钮之类的。但加入Do Events后,当执行到该语句时,计算机会允许响应其它操作。例如:
Do while(1) i=i+1 sum=sum+1 if i>10000 then Exit Do end if do eventsloop
如果不小心造成了死循环,可以使用组合键ctrl+Pause Break强制退出。