?循環語句: 可以讓一部分代碼,反復執行?
1.1?循環語句while
while循環:
編寫格式:
while(條件){
循環體
}
條件: 當條件是true,就執行循環體,執行完循環體后
程序再次執行while中的條件,如果條件還是true,繼續執行循環體
直到條件是false的時候,循環就結束
public class WhileDemo{public static void main(String[] args){//輸出 1-4之間的整數//定義變量,整數類型, 循環的條件int i = 1;while( i < 5 ){System.out.println(i);i++;}}
?
在上述代碼中,x初始值為1,在滿足循環條件x <=?4的情況下,循環體會重復執行,打印x的值并讓x進行自增。因此打印結果中x的值分別為1、2、3、4。
大家要注意的是,代碼x++用于在每次循環時改變變量x的值,從而達到最終改變循環條件的目的。如果沒有這行代碼,整個循環會進入無限循環的狀態,永遠不會結束。
?
1.2?循環語句for
for循環語句是最常用的循環語句,一般用在循環次數已知的情況下。for循環語句的語法格式如下:
for(初始化表達式; 循環條件; 操作表達式){
執行語句
………
}
/*for循環編寫格式for(初始化變量 ; 條件 ; 增量){循環體}初始化變量: 定義變量,作用,控制循環的次數條件: 當條件是true,執行循環體,條件是false,結束循環增量: 變量自增情況 */ public class ForDemo{public static void main(String[] args){//for循環,輸出0-10for(int i = 0 ; i < 11 ; i++){System.out.println(i);}} }
for循環執行示意圖如下:
利用for循環累加求和
*利用for循環,計算1+4的結果1 + 2 + 3 + 4 = 101+2的和+31+2+3的和+4 */ public class ForDemo_1{public static void main(String[] args){// 定義變量,記錄求和后的數據int sum = 0;// 利用循環,將變量從1變化到4for(int i = 1 ; i <= 4 ; i++){//對變量進行求和sum = sum + i;}System.out.println(sum);} }
1.3?循環語句do…while
do…while循環語句和while循環語句功能類似,其語法結構如下:
do?{
執行語句
………
} while(循環條件);
在上面的語法結構中,關鍵字do后面{}中的執行語句是循環體。do…while循環語句將循環條件放在了循環體的后面。這也就意味著,
循環體會無條件執行一次,然后再根據循環條件來決定是否繼續執行。(也就是先做后判斷!)不管循環條件是否滿足都會執行一次循環體!
do…while循環的執行流程如下圖所示
?
基礎示例:
*do...while循環編寫格式:do{循環體}while(條件);特點: 無條件先執行一次 */ public class DoWhileDemo{public static void main(String[] args){int i = 0; do{System.out.println(i);i++;}while( i < 5);} }
接下來使用do…while循環語句來實現打印1~4之間的自然數DoWhileDemo.java。
特點:(也就是先做后判斷!)不管循環條件是否滿足都會執行一次循環體!
public class DoWhileDemo {public static void main(String[] args) {int x = 1; // 定義變量x,初始值為1do {System.out.println("x = " + x); // 打印x的值x++; // 將x的值自增} while (x <= 4); // 循環條件 } }
?
我們發現WhileDemo.java與DoWhileDemo.java運行的結果一致,這說明什么呢?這說明do …while循環和while循環能實現同樣的功能。
然而在程序運行過程中,這兩種語句還是有差別的。如果循環條件在循環語句開始時就不成立,那么while循環的循環體一次都不會執行,
而do…while循環的循環體還是會執行一次。若將DoWhileDemo.java中的循環條件x<=4改為x < 1,
DoWhileDemo.java運行結果會打印x=1,而WhileDemo.java運行結果什么也不會打印。
?
1.4?無限循環
最簡單無限循環格式:
while(true){}
或
for(;;){}
無限循環存在的原因是并不知道循環多少次,而是根據某些條件,來控制循環。
如下代碼是無限循環的幾種寫法!
?
?
public class WhileForDemo{public static void main(String[] args){//while形式死循環/*while(true){}*///for形式死循環 // for( ; true ; ){ // // }for(;;){System.out.println("a"); }} }
1.5?循環嵌套
嵌套循環是指在一個循環語句的循環體中再定義一個循環語句的語法結構。while、do…while、for循環語句都可以進行嵌套,并且它們之間也可以互相嵌套,如最常見的在for循環中嵌套for循環,格式如下:
?
外循環,控制的是行數
內循環,控制的是每行的個數
?
?
for(初始化表達式; 循環條件; 操作表達式) {………for(初始化表達式; 循環條件; 操作表達式) {執行語句………}……… }
?
*循環的嵌套: 循環里面還有循環, for形式多for(){for(){}}總的循環次數 = 內循環次數 * 外循環的次數內循環,是外循環的循環體外循環,控制的是行數內循環,控制的是每行的個數 */ public class ForForDemo{public static void main(String[] args){for(int i = 0 ; i < 9 ; i++){for(int j = 0; j < i+1 ;j++){System.out.print("* ");}System.out.println();}} }
?
圖1-1?運行結果
在上述代碼中定義了兩層for循環,分別為外層循環和內層循環,外層循環用于控制打印的行數,內層循環用于打印“*”,每一行的“*”個數逐行增加,最后輸出一個直角三角形。由于嵌套循環程序比較復雜,下面分步驟進行詳細地講解,具體如下:
第一步,在第3行代碼定義了兩個循環變量i和j,其中i為外層循環變量,j為內層循環變量。
第二步,在第4行代碼將i初始化為1,條件i <= 9為true,首次進入外層循環的循環體。
第三步,在第5行代碼將j初始化為1,由于此時i的值為1,條件j?<= i為true,首次進入內層循環的循環體,打印一個“*”。
第四步,執行第5行代碼中內層循環的操作表達式j++,將j的值自增為2。
第五步,執行第5行代碼中的判斷條件j<=i,判斷結果為false,內層循環結束。執行后面的代碼,打印換行符。
第六步,執行第4行代碼中外層循環的操作表達式i++,將i的值自增為2。
第七步,執行第4行代碼中的判斷條件i<=9,判斷結果為true,進入外層循環的循環體,繼續執行內層循環。
第八步,由于i的值為2,內層循環會執行兩次,即在第2行打印兩個“*”。在內層循環結束時會打印換行符。
第九步,以此類推,在第3行會打印3個“*”,逐行遞增,直到i的值為10時,外層循環的判斷條件i <= 9結果為false,外層循環結束,整個程序也就結束了。
?
雙層for循環示意圖:
1.6跳轉語句(break、continue)
break 關鍵字
作用于循環中,終止循環的作用
?
如下圖示例:
?
/*break 關鍵字作用于循環中,終止循環的作用 */ public class BreakDemo{public static void main(String[] args){int i = 1;while(i < 2000){if(i == 3){break;}else{System.out.println(i);}i++;}} }
?
2、?標記?
當break語句出現在嵌套循環中的內層循環時,它只能跳出內層循環
如果想使用break語句跳出外層循環則需要對外層循環添加標記。接下來將ForForDemo.java稍作修改,控制程序只打印4
行“*”,如下所示。BreakDemo02.java
public class BreakDemo_1{public static void main(String[] args){a:for(int i = 0 ; i < 2; i++){for(int j = 0; j < 5 ;j++){System.out.print("j="+j);break a;}System.out.println("i="+i);}} }
3、?continue語句
?
continue語句用在循環語句中,它的作用是終止本次循環,執行下一次循環。
?
/*continue 關鍵字 作用: 在循環中, 終止本次循環,開始下一次循環 */ public class ContinueDemo{public static void main(String[] args){for(int i = 0 ; i < 10 ; i++){if(i%2==0){continue;}System.out.println(i);}} }
?