do..while循環是while循環的變形,它們的區別在于do..while循環可以保證循環體執行次數至少為1次,也就是說do..while循環的循環體執行次數是1~N次,它有點兒先斬后奏的意思,而while循環的循環體執行次數為0~N次。
為什么do..while循環可以保證至少執行一次呢,它和while循環的區別在哪里呢?實際上是因為在開始執行while循環的時候,最先執行的是條件判斷,只有條件為true的時候才會執行循環體,既然是這樣,那么條件就有可能為false,這個時候就會導致循環體執行次數為0次,俗話說,還沒開始就結束了。而do..while循環最先執行的不是條件判斷,它會先執行循環體,然后再進行條件判斷,這樣就可以保證循環體至少執行一次嘍!
接下來我們一起來看看do..while循環的語法結構,以及執行順序,如下圖所示:
圖6-34:do..while語法結構和執行順序
或者參見下圖:
圖6-34:do..while語法結構和執行順序
上圖中清晰的描述了do..while循環執行順序,這里就不再贅述,但需要注意的是do..while循環在最后的時候有一個半角的分號“;”,這個不能丟,丟掉之后編譯器就報錯了。接下來我們看一個do..while循環的典型案例。
示例代碼:業務背景:我們通常在使用的一個系統的時候需要登錄,假設用戶名或者密碼記不清楚了,你是不是需要不斷的“反復的”輸入用戶名和密碼,這就是一個非常典型的循環案例,而這個循環當中首先要做的第一件事兒不是判斷用戶名和密碼是否正確,它的起點是先讓用戶輸入用戶名和密碼,所以這個時候我們就需要使用do..while循環來完成。請看以下代碼:
java.util.Scanner scanner = new java.util.Scanner(System.in);
String username;
String password;
do{
System.out.print("用戶名:");
username = scanner.next();
System.out.print("密碼:");
password = scanner.next();
}while(!username.equals("admin") || !password.equals("123"));
System.out.println("登錄成功,歡迎" + username + "回來!");
運行效果如下圖所示:
圖6-36:do..while案例
解釋以上程序:先提示用戶輸入用戶名和密碼,然后判斷用戶名和密碼,當用戶名不是admin或者密碼不是123的時候繼續提示用戶輸入用戶名和密碼,直到用戶輸入的用戶名是admin并且密碼是123的時候循環結束,循環結束之后輸出登錄成功的信息,只要循環沒有結束就表示用戶名和密碼還是不對,當然,在現實的系統當中我們不可能允許用戶無限制的輸入用戶名和密碼,通常會給幾次輸入機會,當機會用完之后還是沒有登錄成功,通常該賬戶就被鎖定了,你不妨試試這種業務又應該如何完成。
總之while和do..while循環的區別就在于do..while會先執行一次循環體,然后再判斷條件,這樣do..while的循環體至少執行一次。而while循環則是先判斷條件是否合法,如果不合法,則循環體就沒有任何執行的機會。while循環體執行次數是0~N次,但是do..while循環體執行次數則是1~N次。