IT兄弟連 Java語法教程 流程控制語句 迴圈結構語句1
迴圈語句可以在滿足迴圈條件的情況下,反覆執行某一點程式碼,這段被重複執行的程式碼被稱為迴圈體,當反覆執行這個迴圈體時,需要在合適的時候把迴圈條件該為假,從而結束迴圈,否則迴圈將一直執行下去,形成死迴圈。迴圈語句可能包含如下4個部分:
1.初始化語句:一個或多條語句,這些語句用於完成一些初始化工作,初始化語句在迴圈開始之前執行。
2.迴圈條件:這是一個boolean表示式,這個表示式能決定是否執行迴圈體。
3.迴圈體:這個部分是迴圈的主體,如果迴圈條件允許,這個程式碼塊將被重複執行。如果這個程式碼塊只有一行語句,則這個程式碼塊的花括號是可以省略的。
4.迭代語句:這個部分在一次迴圈體執行結束後,對迴圈條件求值之前執行,通常用於控制迴圈條件中的變數,使得迴圈在合適的時候結束。
上面4個部分只是一般性的分類,並不是每個迴圈中都非常清晰地分出了這個4個部分。
1 for迴圈
for迴圈是相對簡潔的迴圈語句,大部分情況下,for迴圈可以替代while迴圈、do-while迴圈。for迴圈的完整語法格式如下:
for(初始化語句;迴圈條件;迭代語句){
迴圈體;
}
程式執行for迴圈時,先執行迴圈的初始化語句,初始化語句只在迴圈開始之前執行一次。每次執行迴圈體之前,先計算迴圈條件的值,如果迴圈條件返回true,則執行迴圈體,迴圈體執行結束後執行迴圈迭代語句。因此,對於for迴圈而言,迴圈條件總比迴圈體要多執行一次,因為最後一次執行迴圈條件返回false,將不再執行迴圈體。
值得注意的是,for迴圈的迴圈迭代語句沒有與迴圈體放在一起,因此即使在執行迴圈體時遇到continue局域結束本次迴圈,迴圈迭代語句也一樣會得到執行。
如果迴圈體只有一行語句,那麼迴圈體的花括號可以省略:
for(初始化語句;迴圈條件;迭代語句) 迴圈體;
例:下面的程式演示了for迴圈的執行流程:
public class ForDemo{
public static void main(String[] args){
for(int i = 0;i < 10; i++){
System.out.println("i的值為:" + i);
}
}
}
編譯並執行這個程式,控制檯將顯示如圖10所示的資訊。
圖10 ForDemo執行結果
在上面的迴圈語句中,for迴圈的初始化語句只有一個,迴圈條件也只是一個簡單的boolean表示式,實際上,for迴圈允許同時制定多個初始化語句,迴圈條件也可以是一個包含邏輯運算子的表示式,如下所示:
public class ForDemo{
public static void main(String[] args){
for(int b = 0,s = 0,p = 0;b < 10 && s< 4 && p < 10;p++){
System.out.println(b++);
System.out.println(++s + p);
}
}
}
上面的程式碼中初始化變數有三個,但是隻能有一個宣告語句,因此如果需要在初始化表示式中宣告多個變數,那麼這些變數應該具有相同的資料型別。
另外,for迴圈還有一些有趣的變體,是通過不對迴圈的某些部分進行定義來實現的。在Java中,for迴圈的所有或部分初始化,條件或迭代部分都可以為空,如下所示:
public class ForDemo{
public static void main(String[] args){
int i;
for(i = 0; i < 10;){
System.out.println("i的值為:" + i);
i++;
}
}
}
編譯並執行這個程式,控制檯將顯示如如11所示的資訊。
圖11 修改後的ForDemo執行結果
這裡,for迴圈沒有迭代表達式,而把迴圈控制變數i的增加放在了迴圈體的內部。這就意味著每次迴圈時都要測試i是否等於10,除此之外沒有進一步的動作。當然,因為i的增加在迴圈體內部,所以迴圈還可以正常進行。
下面在看for迴圈的另一個變體,在下面的例子中,for迴圈的初始化部分也被移出了for迴圈:
public class ForDemo{
public static void main(String[] args){
int i = 0;
for( ; i < 10; ){
System.out.println("i的值為:" + i);
i++;
}
}
}
重新編譯並執行這個程式,控制檯將顯示如圖12所示的資訊。
在此版本中,在迴圈開始前就把i初始化了,沒有把它作為for迴圈的一部分。一般情況下都是把迴圈控制變數的初始化放在for迴圈內部,但是當初始值是通過某個複雜過程得到的,而又不方便把這一過程放在for語句中時,可以把初始化放在迴圈之外。
圖12 再次修改後的ForDemo執行結果
for迴圈還有另外一種變體就是將迴圈的條件表示式設為空,可以生成無限迴圈,即永遠不會停止的迴圈。例如下面的程式碼就是Java程式建立無限迴圈的常用方法:
for( ; ; ){
//...
}
該迴圈將永遠執行下去,儘管有許多程式設計任務,如作業系統命令處理器,需要無限迴圈,但是多數“無限迴圈”都是具有特殊終止條件的迴圈。
在Java中,for迴圈(或其他迴圈)可以沒有迴圈體,因為空語句在語法上是有效的。沒有迴圈體的迴圈十分有用。例如,下面的程式就是用了沒有迴圈體的迴圈,計算從1至5的數之和:
public class ForDemo2{
public static void main(String[] args){
int sum = 0;
for(int i = 1; i <= 5; sum += i++);
System.out.println("1至5的和為:" + n);
}
}
編譯並執行這個程式,控制檯將顯示如圖13所示的資訊。
注意,整個求和過程是在for語句中完成的,不需要迴圈體。這裡要特別注意迭代表達式:
sum += i++;
圖13