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。