一、嵌套循環
循環可以互相嵌套,以實現更加復雜的邏輯,其代碼的復雜程度也會提高,對初學者而言這應該是個難點,下面我們通過一些例子說明嵌套循環的使用,讀者要自己把這些代碼上機練習,並理解程序運行的流程。
先看看一個簡單例子,代碼如下:
//二重循環 for(int i=0;i<3;i++){ for(int j=0;j<2;j++){ System.out.println("i="+i+",j="+j); } }
上面是一個二重循環,因為在for循環里又嵌套了一個循環,當然循環可以無限嵌套,所以也就是有無限重的循環,但是一般我們寫代碼的時候很少超過三重循環。
在第一層循環中,循環的控制頭和上面介紹的沒有不同,僅僅只是該循環的循環體里又包含了一個循環,我們需要的是理解這段程序的執行流程:
外層循環i=0時,條件滿足進入循環體,並執行第二層循環,
第二層循環是j=0,條件滿足進入循環體,並執行里面的輸出語句,輸出:
i=0,j=0
然后還是第二層的循環還沒有結束,繼續執行,這個時候j=1,所以輸出:
i=0,j=1;
第二層循環結束。
這個時候外層循環還沒有結束,i自增1后,又進入循環,並再次執行第二層循環這個時候i=1,又再一次的執行了第二層的循環:
第二層循環是j=0,條件滿足進入循環體,並執行里面的輸出語句,輸出:
i=1,j=0
然后還是第二層的循環還沒有結束,繼續執行,這個時候j=1,所以輸出:
i=1,j=1;
第二層循環結束。
類似的,這個時候外層循環還沒有結束,i自增1后,i=2又進入二層循環,所以這個程序最后的輸出結果是:
i=0,j=0
i=0,j=1
i=1,j=0
i=1,j=1
i=2,j=0
i=2,j=1
下面我們再具一個稍微復雜一點的程序:輸出乘法表。
1×1=2
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
...
1X9 ... ... 9X9=81
實現代碼如下:
for(int i=1;i<10;i++){ for(int j=1;j<=i;j++){ System.out.print(j+"X"+i+"="+(i*j)+" "); } System.out.println(); }
二、break
break與continue語句和都是可以控制循環的執行流程的,其中break語句可以直接強行跳出整個循環,默認情況下直接跳到下一條語句進行執行。比如我們要輸出類似下面的三角形星號符。
*
* *
* * *
* * * *
* * * * *
* * * * * *
* * * * * * *
實現代碼如下:
public class Test { //三角形的高度 // 直角三角形的高度 int hight = 0; System.out.println("請輸入三角形的高度:"); // 提示信息 Scanner scnr = new Scanner(System.in); // 獲取控制台輸入 hight = scnr.nextInt(); // 在控制台輸入中取下一個int值 for (int i = 0; i < hight; i++) { // 按hight的高度一層一層打印 for (int j = 0; j < hight; j++) { // 每次繼續迭代,原則第一層打一個, 第二層打二個,第三層打三個… if (j <= i) { System.out.print("*"* "); } else { // 退出循環的條件,比如在第二層打 第三個是退出 break; //后面不能寫代碼了,會提示錯誤 } } System.out.println(); // 每層的換行符 }
讀者可以上機演示上面的代碼。注意在嵌套循環中break只能跳出自己的循環體,對於父循環體沒有任何影響。直接寫在break語句后面的代碼在Eclipse中會提示錯誤,因為這些語句具有不可達性。
前面介紹過在java中沒有goto語句,但是在循環中使用break語句可以達到類似goto語句的效果,這種用法是在break語句中添加行標號,控制會被傳遞給當前方法中的帶有這一標號的語句,這種格式的寫法如下:
break label;
三、continue語句
continue語句語句和break語句一樣都是指退出循環,但是區別在於continue特指退出當前一層循環,繼續下一層循環的執行。可以認為是continue是對break語句的一種補充機制,提供了終止當前一層循環繼續去判斷循環控制表達式進而繼續執行循環體的可能。Continue跟break類似,同樣提供類似goto的功能:
continue toCode;
注意退出循環的方法除了使用break語句/continue語句外,你還可以使用return,return的優先級別非常高,在任何情況下它都會直接終止當前方法的運行。參考下面的示例:
for (int i = 0; i < 3; i++) { System.out.println("開始第" + i + "次for循環"); if (i == 1) { continue;//程序運行后面的代碼就不會執行,但循環不會退出。 } System.out.println("看看continue后這里執行了嗎?"); }
