循环结构可以让我们的程序在我们所指定的条件下反复的执行一段程序代码,循环结构的执行可以利用检查条件值的结果为False 或True 来决定是否继续执行。在VB.NET 中有两种型态的循环,分别为Do...Loop 循环以及For...Next 循环。
Do...Loop 循环 Do...Loop 循环结构可以让我们依据某个条件的传回值为False 或True,决定是否要反复执行某段程序代码区块。Do...Loop 循环有四种,分别为Do...Loop While、Do...Loop Until、DoWhile...Loop 以及Do Until...Loop。
Do...Loop While 循环 这种Do...Loop While 结构的循环,不管条件判断式是否成立,至少执行一次。Loop While 则表示如果While 后面的条件判断式成立的话,即跳回Do 继续执行循环,其语法如下:
Do 程序代码叙述 Loop While 条件判断式 Do...Loop While 循环在执行式,会先跳进循环内执行程序代码叙述;执行完毕遇到Loop While即检查条件判断式的结果。倘若条件判断式的结果为True,程序的执行就会跳到Do 重新执行循环,一值执行到条件判断式的结果为False 为止。我们来看看下列的范例:
<html> <% Dim shtLoop As Short=CShort(Request("Loop")) Dim shtX As Short=1 Do Response.Write("循环执行了:" & CStr(shtX) & "次<br>") shtX+=1 Loop While shtX<=shtLoop %> </html>
Do...Loop Until 循环 这种Do...Loop Until 结构的循环,不管条件判断式是否成立,一样至少执行一次。Loop Until则表示如果Until 后面的条件判断式传回False 不成立的话,即跳回Do 继续执行循环,做到Until后面的条件判断式传回True 成立为止,其语法如下:
Do 程序代码叙述 Loop Until 条件判断式
Do...Loop Until 循环在执行时,会先跳进循环内执行程序代码叙述;执行完毕遇到Loop Until即检查条件判断式的结果。倘若条件判断式的结果为False,表示目前的条件判断式还未满足,程序的执行就会跳到Do 重新执行循环,一值执行到条件判断式的结果为True 满足为止。我们将上列的范例改成以Do...Loop Until 的方式撰写:
<html> <% Dim shtLoop As Short=CShort(Request("Loop")) Dim shtX As Short=1 Do Response.Write("循环执行了:" & CStr(shtX) & "次<br>") shtX+=1 Loop Until shtX>shtLoop %> </html>
Do While...Loop 循环 这种Do While...Loop 结构的循环,则是先判断条件判断式是否成立,才会跳入循环内执行。其语法如下:
Do While 条件判断式 程序代码叙述 Loop
Do While...Loop 循环在执行时,会先判断条件是否成立,再进入循环。循环内的程序叙述执行到Loop 时,则表示跳回Do While 叙述执行后面的条件判断式,倘若为True 成立即跳入循环继续执行;倘若为False 则跳出循环,继续程序的执行,我们来观察下列的范例:
<html> <% Dim shtLoop As Short=CShort(Request("Loop")) Dim shtX As Short=1 Do While shtX<=shtLoop Response.Write("循环执行了:" & CStr(shtX) & "次<br>") shtX+=1 Loop %> </html> ????
外这种Do While...Loop 循环还有另一种写法,那就是While...End While。其语法如下所示:
While 条件判断式 程序代码叙述 End While
上述程序代码范例可以改成:
<html> <% Dim shtLoop As Short=CShort(Request("Loop")) Dim shtX As Short=1 While shtX<=shtLoop Response.Write("循环执行了:" & CStr(shtX) & "次<br>") shtX+=1 End While %> </html>
Do Until...Loop 循环 这种Do Until...Loop 结构的循环,则是先判断条件判断式是否满足,才会跳入循环内执行。其语法如下:
Do Until 条件判断式 程序代码叙述 Loop
Do Until...Loop 循环在执行时,会先判断条件是否已经为True,倘若为False 则进入循环。循环内的程序叙述执行到Loop 时,则表示跳回Do Until 叙述执行后面的条件判断式,倘若为False即跳入循环继续执行;倘若为True 则跳出循环,继续程序的执行,我们来观察下列的范例:
<html> <% Dim shtLoop As Short=CShort(Request("Loop")) Dim shtX As Short=1 Do Until shtX>shtLoop Response.Write("循环执行了:" & CStr(shtX) & "次<br>") shtX+=1 Loop %> </html>
无穷循环 在使用循环结构时,要撰写可以让程序跳出循环的程序叙述。也就是说要可以让循环判断式的结果核定为不继续执行循环。倘若循环中没有可以改变条件叙述之结果的程序,则永远无法跳出循环,这样的循环我们称为无穷循环。例如上面的Do Until...Loop 循环,我们将改变shtX 的叙述shtX+=1 拿掉,这样的循环就变成无穷循环了,如下范例所示:
Do Until shtX>shtLoop Response.Write("循环执行了:" & CStr(shtX) & "次<br>") Loop ????
VB.NET 提供了可以强迫跳出循环的叙述Exit Do,但是在条件叙述中如果可以指定跳出循环的叙述,则最好不要用Exit Do 叙述来强迫跳出循环。Exit Do 叙述在循环内利用If 判断式判断是否要跳出循环,用法如下范例:
If 条件叙述式Then Exit Do End If
For...Next 循环 当我们知道一段程序代码所要执行的条件以及次数时,就可以使用For...Next 循环。For...Next循环比Do...Loop 循环容易使用及维护,以下为其语法:
For 计数器=起始值to 结束值[Step 递增值] 程序代码叙述 Next [计数器]
循环执行时,要先设定计数器的初始值、结束值与执行一次的递增值为多少。当我们开始执行For...Next 循环时,不管当作计数器的变量其值原来为何,都会重新被填入初始值;当循环执行到Next 时,计数器会被先加上递增值,然后再检查是否超过结束值;如果没有超过结束值则继续执行循环,超过结束值则跳出循环。我们看看下面的程序代码:
<html> <% Dim shtLoop As Short=CShort(Request("Loop")) For shtCount=1 to shtLoop Step 1 Response.Write("循环执行" & CStr(shtCount) & "次<br>") Next shtCount Response.Write("循环结束后计数器的值为" & CStr(shtCount)) %> </html>
上述范例码利用Request 对象输入循环所要执行次数至变量shtLoop 中,当作是循环的结束值;然后指定计数器shtCount 的初始值为1,并且指定执行完一次循环所的递增值为一。我们假设使用者所输入的Loop 参数为2,所以循环执行完第一次时,遇到Next 叙述将计数器递增1,并检查是否超过结束值;此时2 并没有超过结束值,所以在跳进循环中继续执行程序,遇到Next叙述又将计数器递增1,并检查是否超过结束值。此时计数加1 后的值为3 超过结束值,所以便跳出循环。这里要注意的是跳出循环时,计数器的值总是比结束值多了递增值。另外如果递增值为1,那么Step 1 的叙述可以省略。
巢状For...Next 循环 For...Next 循环也可以写成巢状结构,如下所示:
For 计数器1=起始值to 结束值[Step 递增值] For 计数器2=起始值to 结束值[Step 递增值] 程序代码叙述 Next [计数器1] Next [计数器2]
这种巢状的For...Next 循环执行时先设定外层的条件,然后跳进内层回圈内执行内层循环。待内层循环执行超过结束值后,便跳至外层循环的Next 叙述,将外层的计数器递增。外层循环计数器递增后若没超过结束值,则再从新进入循环内重新执行内层循环。此时内层循环的计数器会重新以初始值设定,重头执行。这样执行的次数要等外层循环结束后才会结束,如下面范例所示:
<html> <% Dim shtX,shtY As Short For shtX=1 To 2 Step 1 For shtY =1 To 2 Step 1 Response.Write("shtX=" & CStr(shtX)) Response.Write(" shtY=" & CStr(shtY) & "<br>") Next Next shtX %> </html>
我们观察外层循环以及内层循环计数器的状态值便可知道,外层循环跳进内层循环执行时,外层等到内层执行完毕后再跳至外层将计数器加一,而每次跳进内层时内层计数器的值都会被重新设定。内层的循环会一直反复重新执行,直到外层超过结束值为止。接下来的例子我们利用巢状循环画出九九表:
<html> <table border="1"> <% Dim shtX,shtY As Short For shtX=1 To 9 Step 1 If shtX=1 OR shtX=4 OR shtX=7 Then Response.Write("<tr>") Response.Write("<td>") For shtY =1 To 9 Step 1 Response.Write(CStr(shtX) & "X" & CStr(shtY) & "=" & _ CStr(shtX * shtY) & "<br>") Next shtY Response.Write("</td>") If shtX=3 OR shtX=6 OR shtX=9 Then Response.Write("</tr>") Next shtX %> </table>
|