Java/循環結構

維基教科書,自由的教學讀本

順序結構的程序語句只能被執行一次。如果您想要同樣的操作執行多次,甚至您也不清楚應該是多少次——它依情況而定,那麼您需要在程序中使用循環結構。

Java中有三種主要的循環結構:while,do...while,for。

while[編輯]

while是最基本的循環,它的結構為:

while( 判断条件 ) { 
   循环内容
  }

當執行到while語句時,會首先判斷括號中的條件是否滿足(真/假),若真,則進入循環;反之則跳過循環。進入循環後,會一直執行循環內容。執行結束後返回,再次判斷括號中的條件,決定是否再次進入循環,如此往復……直到括號中的條件為假,跳出循環為止。

括號中的判斷條件,可以是布爾值或者布爾表達式,甚至數字(0代表false,而正數代表true,這種用法在Java中並不常見)。

package wikibooks;

public class Exercise {
    public static void main(String args[]){
        int num = 1;
        while( num < 3 ){ //判断是否进入循环         
        	System.out.println( "num=" + num + "<3,不能跳出循环" ); 
                   num++;
     }
        System.out.println( "num=" + num + ">=3,跳出循环" );
    }
}

執行結果:

num=1<3,不能跳出循环
num=2<3,不能跳出循环
num=3>=3,跳出循环

有一種特殊的循環叫做「無限循環」或者「無窮迴圈」,跳出循環的條件永遠無法滿足。如:

package wikibooks;

public class Exercise {
    public static void main(String args[]){

        while( true ){
        	System.out.println( "不断重复\n直到永远");
        }
        
    }
}

執行結果:

不断重复
直到永远
不断重复
直到永远
...

這種情況一般被認為是危險的,因為程序不能停止。但我們有時會用到while(true)這樣的用法,並利用其它方法跳出循環。(參見後面的break和continue)

do...while[編輯]

對於while語句而言,如果不滿足條件,則不能進入循環。但有時候我們需要即使不滿足條件,也至少執行一次。

比如我們想知道一個維基人的身體是否達到體育標準,我們不能直接判斷。我們需要讓他進行鍛煉,然後進行體質測試,這之後進行判斷。如果合格,則不再進行測試;反之,則此維基人將繼續進行體育鍛煉,再次測試。如此循環。

此過程可概括為先執行,後判斷。do...while即此種用法。

do{
    体育锻炼;
    体质测试;
}while(!测试结果);
package wikibooks;

public class Exercise {
    public static void main(String args[]){
        double guess;
        do{
            guess = Math.random();      //给guess一个0-1之间的随机数值
            System.out.println( guess );
        }while( guess > 0.1 );          //判断guess是否大于0.1
    }
}

由於guess是隨機數,程序執行的結果是不確定的。其中一次執行的結果是:

0.4478991576615713
0.9647035938994791
0.645764446922368
0.6285696297572023
0.08508127031573565

for[編輯]

雖然所有循環結構都可以用while或者do...while表示,Java提供了另一種語句——for,使一些循環結構變得更加簡單。

for循環的基本結構為

for(初始化语句; 进入循环条件; 循环末执行语句) {
   循环内容
  }

for循環極其適用於那些限定循環次數的循環結構。一種常用的形式如:

package wikibooks;

public class Exercise {
    public static void main(String args[]){
        int i;
        for( i = 0; i < 5; i++ ){
            System.out.println( i );
        }
    }
}

執行到for語句時,首先i被賦值為0;然後判斷進入循環條件 i < 5,滿足則進入循環;執行完循環體之後,執行循環末語句i++;再次判斷進入循環條件……

執行結果:

0
1
2
3
4

理論上,for語句也可以實現while語句的所有功能——將括號中第一和第三部份留空,則while和for循環就完全一致了。但在使用時,根據需要靈活使用,會更方便。在不知道從第幾個版本開始,for語句開始支持對foreach的支持。一般的形式如下:

int[] data = {1, 2, 3, 4, 5};
for(int t : data){
    System.out.println(t);
}

執行結果:

1
2
3
4
5

以上代碼中的for遍歷了data中的所有數據,每次將數據存儲在局部變量t中並運行一次循環塊。在Java中,所有的數組均可以用該形式的for循環。另外,實現了java.lang.Iterable<T>接口的類,也可以使用該for循環,比如java.util.Collection。