在Java編程中,我們經常需要重複執行一段代碼,比如打印多個數字、計算總和等。這時候循環結構就派上用場了。常見的循環有while循環、do-while循環和for循環。今天我們重點學習do-while循環,它的獨特之處在於先執行循環體,再判斷是否繼續循環,這能確保循環體至少被執行一次,避免了循環體可能不執行的問題。
一、do-while循環的語法結構¶
do-while循環的基本格式如下:
do {
// 循環體:需要重複執行的代碼
語句1;
語句2;
// ...
} while (條件表達式); // 注意這裏有分號
關鍵點:
1. 先執行循環體:無論條件是否成立,都會先運行大括號裏的代碼。
2. 後判斷條件:執行完循環體後,纔會判斷while後面的條件表達式是否爲true。
- 如果爲true,繼續執行循環體;
- 如果爲false,則結束循環。
二、爲什麼需要do-while循環?¶
while循環的執行順序是先判斷條件,再執行循環體。如果初始條件不滿足,循環體一次都不會執行。而do-while循環通過“先執行、後判斷”的邏輯,確保循環體至少執行一次,這在以下場景中非常實用:
- 需要先處理一次數據(比如讀取用戶輸入,即使用戶輸入的內容不符合條件,也先執行一次交互);
- 必須完成某件事至少一次(比如檢查文件是否存在,即使文件不存在也需要先嚐試讀取一次)。
三、執行流程示例¶
我們通過一個簡單的例子來理解do-while的執行過程:輸出1到5的數字。
int i = 1; // 初始化循環變量
do {
System.out.println("當前數字:" + i); // 循環體
i++; // 更新循環變量(關鍵:否則會無限循環)
} while (i <= 5); // 判斷條件:i是否小於等於5
執行步驟:
1. 先執行循環體:輸出當前數字:1,然後i變爲2;
2. 判斷條件i <= 5(2 <= 5)爲true,繼續循環;
3. 執行循環體:輸出當前數字:2,i變爲3;
4. 重複步驟2-3,直到i變爲6:
- 執行循環體輸出當前數字:5,i變爲6;
- 判斷條件i <= 5(6 <= 5)爲false,循環結束。
四、經典應用場景:用戶輸入交互¶
假設我們需要讓用戶輸入一個整數,只有當輸入的數字爲負數時才退出程序。即使用戶第一次輸入的就是負數,do-while也會先執行一次循環體,這能保證交互邏輯的完整性。
import java.util.Scanner; // 導入Scanner類用於接收用戶輸入
public class DoWhileExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num;
do {
System.out.print("請輸入一個整數(負數將退出程序):");
num = scanner.nextInt(); // 接收用戶輸入
if (num >= 0) {
System.out.println("你輸入了正數,繼續輸入吧!");
} else {
System.out.println("你輸入了負數,程序即將退出。");
}
} while (num >= 0); // 條件:num >=0 時繼續循環
scanner.close(); // 關閉Scanner
}
}
執行過程:
- 第一次輸入:無論用戶輸入正數(如5)還是負數(如-3),都會先執行循環體(打印提示信息);
- 若輸入負數(如-3),判斷條件num >=0爲false,循環結束;
- 若輸入正數(如5),判斷條件爲true,繼續循環,直到用戶輸入負數。
五、常見錯誤與注意事項¶
- 忘記更新循環變量:如果循環體中沒有更新循環變量(如
i++),循環條件會永遠成立,導致無限循環。
// 錯誤示例:無限循環
int i = 1;
do {
System.out.println(i);
// 缺少i++,i永遠是1,條件i < 100永遠成立
} while (i < 100);
-
分號不能省略:
do-while循環的while後面必須有分號,否則編譯報錯。 -
避免條件永遠成立:確保循環條件最終會變爲
false,例如用戶輸入的終止條件必須能被觸發。
六、總結¶
do-while循環的核心是“先執行,後判斷”,這使得循環體至少被執行一次。相比while循環,它更適合以下場景:
- 需要確保循環體至少執行一次(如用戶輸入驗證);
- 不確定初始條件是否滿足,但必須先處理一次數據(如讀取文件、檢查數據有效性)。
掌握do-while循環的語法和執行邏輯,能幫助你更靈活地處理重複操作,避免循環體不執行的問題。記住:循環變量的更新和條件的正確性是避免無限循環的關鍵。