上次我們說過了for循環,簡單來說,for循環一般適用於控制某些操作執行次數。但是實際上,我們在處理實際問題是,時常會遇到另外一種需要用到循環的情況:那就是說,當某種條件成立時,我們執行某些操作。比如:當天上下雨的時候,我就一直在家睡覺;當我覺得無聊的時候,我就一直看蠟筆小新;等等等等,諸如此類。那么,在java中該如何表現這種循環呢,這就是我們今天要說的while循環了。while循環在java里的格式是這樣的:
初始化某種條件(大多數時候)
while(某種條件成立)
{
執行某些操作;
改變while里面的那個條件;(大多素時候需要改變,但也有一些時候不用改變)
}
以上就是while循環了,為了更好的說明問題,我們來做個讓用戶輸入的小程序,這個小程序中,只要用戶輸入yes, 那么java就會一直打印出"Hello baby",然后java會提示用戶繼續輸入內容,只要用戶輸入的不再是yes, 那么就跳出while循環。如下所示:
我們看的出來,當我們輸入yes的時候,不管大小寫,都會打印出Hello baby, 這是因為equalsIgnoreCase函數的原因,是忽略大小心的比較。當我們輸入的不是yes的時候,就會跳出while循環,繼續while之后的程序運行。while循環的運行順序是這樣的:
1. 首先檢查while里面的條件,如果是true,則進入while下面的花括號,執行里面的操作。如果是false,則直接跳過while循環,繼續運行后面的程序。
2. 如果進入了while循環,那么操作完以后,則返回到while后面的圓括號,檢查那個條件是否為true, 是的話執行花括號里面的操作,不是的話跳出循環繼續后面的程序。
3. 重復第二步,直到跳出while循環。
動態的改變while后面的判定條件是很重要的,如果在while循環的花括號里沒有改變判定條件,那么有可能導致while循環永遠的執行下去,也就是傳說中的死循環,我們以后可以解釋一下,但是目前就告訴你,死循環就是不斷的沒有終止的循環。我們來看一下下面的程序,我們只要把上面的程序略微改動就可以了,就是如下的代碼:
你看,一直在打印Hello baby,沒完沒了的。如果遇到這種情況也不要着急,直接Ctrl + C就可以強制退出程序了。
死循環是不好的,是由於邏輯錯誤而產生的,也就是logical error,這種錯誤是人為的,java編譯器無法檢測出來。java編譯器只能檢測出syntax error,也就是書寫的語法錯誤。
那么,是不是while循環里就一定要改變while的判定條件呢?其實這不是絕對的。因為實際上,我們可以使用break強制跳出循環,或者如果while是在一個函數里,那么我們也可以使用return跳出函數,當然,也就跳出了while循環。然而作為初學者,目前先不要太在意這個,如果有興趣可以去看看。continue, break我們以后會說到,return則要等到解釋函數的時候再說了。
最后,我們來用while循環來做一個input checking,來結束本次的課程。input checking就是輸入檢測,就是說如果用戶輸入的數據不符合程序要求的時候,程序將要求用戶重新輸入,直到用戶輸入適合的數據。我們這次讓用戶輸入一個表示浮點型數據的字符串,然后使用String的matches方法和正則表達式來判斷用戶的輸入是否是一個數字,如果不是則一直淪陷在while循環里,如果是,則跳出while循環,計算並顯示出sin(x)的值,程序以及運行結果如下:
可以看出,while循環用來檢測用戶的輸入,是一個很好的辦法,這可以算是while循環的一種應用。雖然while循環還有很多可以說的,但是怕說的雜亂無章,又或扯的太遠,所以今天就先到這里吧,下次我們還要繼續說說循環,因為循環在任何計算機語言里都是很重要的,當然也包括java。