在日常生活中,會有很多需要反復執行的事情,比如:每一年的4個季節,每一周的7天,每日的3餐,打印機每份文檔打印50份,一圈跑道400米跑3圈,都是在反復執行的。
再看軟件系統中的需求:
問題1:輸出100行語句,每行語句都一樣,即:
…
問題2:輸出100行語句,每行語句都類似,即:
問題3:計算1到50乘以8.88的結果
諸如此類問題都是在反復執行的,在軟件系統中可以通過循環這種語法結構來解決。循環是程序設計語言中反復執行某些代碼的一種計算機處理過程, 是一組相同或相似語句被有規律的重復性執行。
對于循環來說,需要考慮兩個要素,其一要素為循環體, 也就是被反復執行的相同或相似的語句,其二要素為循環的條件,也就是循環得以繼續執行下去的條件,常常以循環次數的方式體現。
常用的循環結構有:while、do-while、for。
1.2. while語句1.2.1. while語句的執行邏輯while語句是循環的一種常見語法結構,語法如下:
while( boolean表達式 ) { 語句塊;}while語句的執行過程為,首先計算boolean表達式的值,而后進行判斷,若值為true則執行語句塊,語句塊執行完后再次判斷boolean表達式的值,如果為true則繼續執行語句塊,如此循環往復,直到boolean表達式的值為false時退出while循環而執行while之后的語句。
1.2.2. while語句的流程圖while語句的流程圖如圖 - 11所示,需要注意的是,一般情況下,循環操作中會存在使得循環條件不滿足的可能性,否則該循環將成為“死循環”。“死循環”意味著會一直執行循環體操作,循環后面的語句永遠不會被執行,“死循環”在軟件系統中是需要避免的。

圖 - 11
1.2.3. while語句用于處理循環邏輯while語句在實際應用中應用比較廣泛,通過如下示例體會while語句的執行邏輯:
int age = 1;while (age<=100) {System.out.PRintln(“馬上有錢”);age++;}上面的語句執行過程如下,首先聲明整型變量age并賦初始值為1,而后判斷age是否小于等于100,條件為真,輸出“馬上有錢”并將age的值增1變為2,再次判斷條件,此時age為2,依然小于100,再一次輸出“馬上有錢”并將age的值再增1變為3,以此類推,直到age等于101時,判斷條件為false,循環結束。
1.2.4. 使用break語句跳出循環break用在循環體中用于退出循環結構。看如下示例代碼:
int x = 0;while ( x < 10 ) { if ( 5 == x ) { break; } System.out.println(x); x + + ;}分析上面的代碼得出結論,輸出結果為0 1 2 3 4,因為當x等于5時執行break語句直接退出循環結構了,即if語句塊后面的輸出x的值以及x++不再被執行。
1.3. do-while語句1.3.1. do-while語句的執行邏輯do-while語句也是循環的一種常見語法結構,語法如下:
do { 語句塊} while( boolean表達式 ) ;do-while語句的執行過程為,先執行語句塊,再判斷boolean表達式,如果為true則再次執行語句塊,如此循環往復,直到boolean表達式的值為false時止。也就是說,do-while語句,無論boolean表達式是否為true,都先執行一次語句塊。
1.3.2. do-while語句的流程圖do-while語句的流程圖如圖 - 12所示,與while語句一樣,do-while語句也要避免“死循環”的發生。

圖- 12
1.3.3. do-while語句用于處理循環邏輯do-while語句在實際應用中應用比較廣泛, 通過如下示例體會do-while語句的執行邏輯:
int pwd ;do{ System.out.print(“請輸入密碼”); pwd = scanner.nextInt();} while ( 123 != pwd) ;上面的語句執行過程如下,首先聲明整型變量pwd,在do語句中提示“請輸入密碼”,接收用戶輸入的數據賦給pwd, 而后判斷123是否不等于pwd,若為true則執行do語句塊,以此類推,直到123等于pwd時,循環結束。
1.3.4. while和do-while語句的區別while與do-while都是用于執行循環結構的語句,區別在于,while循環先判斷再執行,而do-while循環先執行一次,再判斷。那么,當初始情況不滿足循環條件時,while循環就一次都不會執行,而do-while循環不管任何情況都至少會執行一次。
注意:while和do-while語句的不同僅僅體現在第一次就不滿足條件的循環中;如果不是這樣的情況,while與do-while可以互換。請看如下兩段示例程序:
//示例1:while循環方式int pwd = 0;while ( 123 != pwd){ System.out.print(“密碼:”); pwd = scanner.nextInt();}//示例2: do-while循環方式int pwd ;do{ System.out.print(“密碼”); pwd = scanner.nextInt();} while ( 123 != pwd) ;分析示例1與示例2得出結論,運行結果完全一樣。這是因為兩段代碼第一次的while條件都滿足,此時while與do-whlie可以互換,所以結果完全一樣。
1.4. for語句1.4.1. 考慮如下循環問題的相同之處請考慮如下三個題目的相似之處:
通過上面的問題可以看出,如上三個題目都是在有規律的重復執行某個操作,在程序中
考慮使用循環結構來解決。首先需要先找到前面介紹的循環變量,此循環變量在每一次的循環中有規律的發生變化,并且常常作為判斷是否繼續循環的條件。
首先,看第1個題目,設計循環變量i ,i的值為1,2,…,100,即:從1開始,每次增1。第二個題目,設計循環變量i , i的值為1,3,5,…,999,即:從1開始,每次增2。第三個題目,設計循環變量i , i的值為1,2,…,500,即:從1開始,每次增1。
通過上面的分析,可以看出,如上的循環都是固定次數的循環,這種情況,優先考慮使用for語句來實現。
1.4.2. for語句的執行邏輯for語句是循環中最最常用的一種方式。for循環用于將某個語句或語句塊重復執行預定次數的情形。語法如下:
可以看出,for循環的三個表達式之間通過分號;進行分隔,其執行邏輯如下所示:
for語句流程圖如圖-1所示:

圖- 1
簡單示例如下:
for ( int i = 1 ; i <= 10 ; i + + ) { System.out.println( i );}如上程序的輸出結果為:1 2 3 4 5 6 7 8 9 10
分析如上程序的執行過程:首先,初始化i的值為1,判斷i是否小于等于10,結果為true,其次,輸出i的值1,然后,執行i的自增1,再判斷i是否小于等于10,結果為true,執行輸出i的值2,以此類推……輸出i的值10后,執行i的自增1,此為i為11,判斷結果為false,程序終止。
1.4.4. for語句用于實現固定次數循環for語句常常用于解決固定次數循環的處理,比如說累加和,想求1+2+3+…+100的結果,次數固定執行100次,可以考慮使用for循環處理,參見如下代碼:
int sum = 0 ;for ( int i = 1 ; i <= 100 ; i + + ) {sum += i ;}System.out.println(“1到100的和為:” + sum ) ;分析上面代碼的執行過程,首先,聲明一個變量用于保存累加和,此變量命名為sum,賦初始值為0,而后,for循環從1開始,每次增1,執行100次,循環體中將i的值累加到sum變量中。注意:每次都是在sum的基礎之上加上i,所以使用了sum += i。循環結束后,輸出結果“1到100的和為:5050“。
了解了如上題目之后,問:想求10的階乘,即1*2*3*…*10,可不可以使用for循環來解決,如果可以的話要如何解決呢?當然可以,try!!!
1.4.5. for語句三個表達式特殊用法首先回顧for語句的語法:
for ( 表達式1;表達式2;表達式3 ) {語句塊 }通過上面的代碼可以看出,for語句實現循環時需要3個表達式并且使用分號;分隔,
在實際使用時,for語句可以有幾種特殊的使用方法:
特殊方式1:表達式1位置內容為空,看如下代碼:
int sum = 0 ;int i = 1;for ( ; i <= 10 ; i + + ) { sum += i ;}System.out.println(“1到10的和為:” + sum ) ;通過上面的代碼可以看出,雖然省略了表達式1,但只是將它放在了for循環的外面進行聲明,只是位置不同而已。在此需要注意一點,即使for語句中不寫表達式1了,表達式2前面的分號;也不能省略。
特殊方式2:表達式3位置內容為空時,看如下代碼:
int sum = 0 ;for ( int i = 1 ; i <= 10 ; ) {sum += i ; i + + ;}System.out.println(“1到10的和為:” + sum ) ;通過上面的代碼可以看出,雖然省略了表達式3,但也只是將它放在了for循環體之中,只是位置不同而已。在此需要注意一點,即使for語句中不寫表達式3了,表達式2后面的分號;也不能省略。
特殊方式3:表達式1,2,3位置內容均為空時,看如下代碼:
for ( ; ; ) {System.out.println(“我要學習……”);}通過上面的代碼可以看出,如上代碼沒有循環變量、沒有條件控制,因此會造成死循環,而死循環在編寫程序過程中是必須要避免的,可以在循環體中添加break跳出循環。
特殊方式4:表達式 1 和 3 位置內容的多樣化
for語句中的三個表達式中表達式1和表達式3可以使用逗號表達式,逗號表達式就是通過”,”運算符隔開的多個表達式組成的表達式,從左向右進行計算。看如下示例:
for ( int i =1 , j = 6 ; i <= 6 ; i +=2 , j -=2 ) {System.out.println(“ i , j = “ + i + “,” + j );}上面的代碼的執行邏輯如下:初始設置i為1,j為6,判斷i是否小于等于6,為真執行循環體,而后執行i+=2,j-=2,即:i增2,j減2。再判斷i是否小于等于6,為真繼續執行循環體,以此類推,直到條件為false。本程序的輸出結果為:
i , j = 1 , 6i , j = 3 , 4i , j = 5 , 21.4.6. 循環中使用break語句
循環中的break語句應用率很廣,break可用于循環語句或switch語句中,其用于循環時,可使程序終止循環而執行循環后面的語句,常常與條件語句一起使用,看如下代碼:
int sum = 0;for(int i=1; i<=100; i++){if(sum>=4000){break;}sum += i;}System.out.println(sum);上面的程序需要統計1到100的累加和,條件是當和大于等于4000時則終止計算,此案例通過在if語句中使用break實現了for語句的退出,本程序最終sum的值為:4005。
1.4.7. 循環中使用continue語句continue語句只能用于循環中,它的作用為跳過循環體中剩余語句而執行下一次循環,看如下代碼:
int sum = 0;for(int i=1; i<=100; i++){if( i % 10 == 3 ){continue;}sum += i;}System.out.println(sum);上面的程序需要統計1到100的累加和,條件是跳過所有個位為3的,此案例通過在if語句中使用continue實現了跳過for語句中剩余的循環體語句,本程序最終sum的值為: 4570。
新聞熱點
疑難解答