Java開發筆記(十八)上下求索的while循環

循環是流程控制的又一重要結構,「白天-黑夜-白天-黑夜」屬於時間上的循環,古人「年復一年、日復一日」的「日出而做、日落而息」即是天天周而復始的生活。計算機程序處理循環結構時,給定一段每次都要執行的代碼塊,而後分別指定循環的開始條件和結束條件,就造成了常見的循環語句。最簡單的循環結構只需一個while關鍵字設置循環條件便可,下面是根據輸入數字決定循環次數的代碼例子:java

		System.out.println("長夜漫漫,無意睡眠");
		System.out.println("請給他設定一個睡醒的年限");
		Scanner scan = new Scanner(System.in); // 從控制檯接收輸入文本
		/* nextLine方法表示接收一行文字,以回車鍵結尾 */
		int limit = scan.nextInt();
		int year = 0;
		while (year < limit) { // 當條件知足時,在循環內部持續處理
			System.out.println("已通過去的年份:"+year);
			year++;
		}
		System.out.println("他足足睡了這麼多年:"+year);

 

運行上面的測試代碼,輸入數字3,連同處理結果的完整日誌以下圖所示。程序員

單純的while語句是在每次循環開始前進行條件判斷,符合條件則執行一圈代碼,不符合的話就退出循環。Java還提供了另外一種形式的do-while循環,該循環以do關鍵字開頭,以while語句結尾,而且條件判斷也挪到了每次循環結束後再處理了。條件判斷的位置變動形成了while循環和do-while循環之間的差別,while循環在開始工做前一定先判斷循環條件是否成立,一旦條件不成立,那麼當前循環一次都不會執行,直接跳到循環後面的語句了。而do-while循環遲至第一次循環執行完畢才作條件判斷,只有發現循環條件不成立時才姍姍來遲退出循環。這意味着,即便循環條件一開始就不知足,do-while循環也必定要進入循環內部,到此一遊後才拍拍屁股離開。
下面經過一個實驗觀察while循環和do-while循環的不一樣之處,演示代碼見下,主要是把循環外圍的while改爲了do-while:測試

		int year = 0;
		do {
			System.out.println("已通過去的年份:"+year);
			year++;
		} while (year < limit); // 當條件知足時,在循環內部持續處理
		System.out.println("他足足睡了這麼多年:"+year);

 

而後運行演示代碼,假若輸入正數,則while循環和do-while循環打印的日誌信息並沒有區別;要是輸入負數,此時兩者打印的日誌就分道揚鑣了。while循環的日誌打印結果以下面的左圖所示,do-while循環的日誌打印結果以下面的右圖所示。日誌

從上面的實驗結果看出,在條件不知足的狀況之下,do-while循環依舊強行遛達了一圈,這種先斬後奏的特性過於武斷,故而限制了它的使用範圍。
不論是while循環仍是do-while循環,它們的條件判斷都獨立於循環內部代碼,要麼在循環開始前判斷,要麼在循環結束後判斷。若是要求在內部代碼的中間就插入條件判斷,並據此決定是退出循環仍是繼續循環,那又該當若何?爲此Java給循環語句引入了break和continue兩個關鍵字,其中break的做用是跳出整個循環,而continue的做用是跳過本次循環的剩餘代碼、直接繼續下次的循環判斷和處理。
如今準備修改以前的代碼,打算在println和year++中間進行是否繼續循環的判斷。首先要把while語句後面的條件式子改成true,表示每次循環先後取消默認的條件校驗。而後在println和year++之間插入if語句開展條件判斷,條件知足的話,就執行year++以及continue操做;條件不知足的話,就直接跳出整個循環,繼續循環之外的代碼處理。根據上述思路修改循環代碼,改好的代碼以下所示:blog

		int year = 0;
		while (true) { // 當條件知足時,在循環內部持續處理
			System.out.println("已通過去的年份:"+year);
			if (year < limit) { // 這裏判斷可否跳出循環
				year++;
				continue; // 繼續下一次循環
			} else {
				break; // 跳出循環。即跳到while循環的右花括號以後
			}
		}
		System.out.println("他足足睡了這麼多年:"+year);

 

接着運行修改以後的代碼,打印出來的循環運行日誌以下圖所示:it

可見此時循環內部接連打印了年份一、年份二、年份3,共三行日誌。對比修改以前只打印年份一、年份2的兩行日誌,顯然修改以後的代碼邏輯更靈活,由於不管循環的內部代碼如何變幻無窮,程序員總能找到合適的地方退出循環處理。class

相關文章
相關標籤/搜索