基礎程式設計(9)-while/until迴路控制

基本迴路控制除了for迴圈之外,另一個就是while迴圈。前者有限定執行的次數,後者則沒有;也就是說,當我們需要重覆執行某一段程式碼,卻無法預測要執行幾次時,就可以使用while迴圈來處理。但是while迴圈如果沒寫好很容易變成永遠無法結束的”無窮迴圈”,所以在撰寫的時候更需要特別注意。

while迴圈基本概念

在while迴圈裡,我們必須要指定迴圈的”執行條件”,當條件為 true 時就不斷地執行迴圈,直到條件不成立為 false 時才離開迴圈。我們使用和for迴圈相同的範例,計算 10 加到 25 時,使用while迴圈可改寫成(適用於C/C++/Java):

int sum = 0;
int i = 10;

//while ( 執行條件的比較運算 )
while ( i <= 25 ) {
    sum += i;
    i++;
}

由於while迴圈不會自動幫我們增加、修改任何變數,所以我們必需要手動把變數 i +1。在第 5 行while迴圈入口的判斷式裡,程式會決定要執行迴圈或是離開迴圈。使用 BASIC 語言時,有兩種撰寫的方式(適用於VB.NET):

Dim sum As Integer
Dim i As Integer = 10

'While 執行條件的比較運算
While i <= 25
    sum += i
    i++
End While
Dim sum As Integer
Dim i As Integer = 10

'Do While 執行條件的比較運算
Do While i <= 25
    sum += i
    i++
Loop

我們可以看到上面兩個 BASIC 語言只有在第 5 行開頭和第 8 行結尾語法不太相同,除此之外都是一樣的。

先後判斷的while迴圈

在上面的範例中,程式一進入while迴圈就會先判斷執行條件。有的時候我們會希望把判斷的時間移到最後面,這時可以把上面的程式改寫成do…while的型式(適用於C/C++/Java):

int sum = 0;
int i = 10;

do {
    sum += i;
    i++;
} while ( i <= 25 ); //執行條件的比較運算

while判斷的方式是一樣的,只不過程式會先把迴圈裡面的語法先執行過一次,再判斷是否要重覆執行迴圈。這種語法常使用在執行條件裡的變數一開始沒有初始值時,如果進入迴圈之前就先判斷,就根本不會執行迴圈。眼尖的讀者應該會發現第 7 行 while 的後面有加一個分號(;),因為這種語法的結尾不是大括號({}),所以在撰寫C風格語法時別忘了加分號。

BASIC 語言在這個部份,只有第二種的 Do…Loop 可以把 While 移到下面,第一種 While…End While 則不行(適用於VB.NET):

Dim sum As Integer
Dim i As Integer = 10

Do
    sum += i
    i++
Loop While i <= 25   '執行條件的比較運算

Do…Loop Until

在 BASIC 語言中,還有另一種迴圈是 Do…Loop Until。看看字面上的意思 Until 代表”直到”,所以它和 While 的判斷方式正好完全相反,迴圈會不斷重覆執行,”直到”條件成立(true)為止。我們使用和前面一樣的範例來改寫,就變成這個樣子(適用於VB.NET):

Dim sum As Integer
Dim i As Integer = 10

Do
    sum += i
    i++
Loop Until i > 25   '結束條件的比較運算

如同while迴圈可以先判斷或後判斷,我們也可以把 Until 移到前面,變成(適用於VB.NET):

Dim sum As Integer
Dim i As Integer = 10

'Do Until 結束條件的比較運算
Do Until i > 25
    sum += i
    i++
Loop

while迴圈使用的機會比for迴圈較少了一點,通常是用在讀取”不知道有多少筆”資料的時候。或著寫隨機變數的時候,我們也會再看到它的。