do-while 循环是 Java 中三种主要的循环结构之一(另外两种是 for 循环和 while 循环),它的核心特点是 “先执行,后判断”。

do-while 循环的基本语法
do {
// 循环体:需要重复执行的代码块
} while (条件表达式);
语法解析:
do: 关键字,表示循环的开始。- 花括号,包含了需要重复执行的代码,称为循环体。
while (条件表达式): 在每次循环体执行完毕后,while关键字会检查条件表达式。- 如果条件表达式为
true,则循环会继续,再次执行do后面的循环体。 - 如果条件表达式为
false,则循环终止,程序会执行do-while循环之后的代码。
- 如果条件表达式为
- 注意:
while (条件表达式);结尾的分号 是必不可少的,这是一个非常容易出错的地方。
do-while 循环的执行流程
do-while 循环的执行顺序非常关键:
-
第一步:执行循环体
- 程序会无条件地执行
do和while之间的代码块(循环体),无论条件是什么。
- 程序会无条件地执行
-
第二步:判断条件
(图片来源网络,侵删)- 循环体执行完毕后,程序会计算
while后面的条件表达式。
- 循环体执行完毕后,程序会计算
-
第三步:决定是否继续
- 如果条件为
true:程序会跳转回第一步,再次执行循环体。 - 如果条件为
false:循环结束,程序会跳出do-while结构,继续执行后续的代码。
- 如果条件为
流程图:
graph TD
A[开始] --> B{执行 do 中的循环体};
B --> C{判断 while 中的条件};
C -- 条件为 true --> B;
C -- 条件为 false --> D[循环结束, 执行后续代码];
D --> E[结束];
do-while vs. while 循环
这是理解 do-while 循环最关键的一点,它与标准的 while 循环有本质区别:
| 特性 | do-while 循环 |
while 循环 |
|---|---|---|
| 执行顺序 | 先执行,后判断 | 先判断,后执行 |
| 至少执行次数 | 至少执行一次 | 可能一次都不执行 |
| 适用场景 | 当循环体必须至少执行一次时使用 | 当循环体可能不需要执行时使用 |
示例对比:
假设我们有一个初始值为 10 的变量 i,条件是 i < 5。
while 循环示例:
int i = 10;
System.out.println("--- while 循环 ---");
while (i < 5) { // 先判断条件: 10 < 5 为 false
System.out.println("while 循环体被执行");
i++;
}
System.out.println("while 循环结束");
输出结果:
--- while 循环 ---
while 循环结束
分析:因为 while 循环是“先判断”,条件 10 < 5 为 false,所以循环体一次都没有被执行。
do-while 循环示例:
int i = 10;
System.out.println("\n--- do-while 循环 ---");
do { // 先执行循环体
System.out.println("do-while 循环体被执行");
i++;
} while (i < 5); // 后判断条件: 11 < 5 为 false
System.out.println("do-while 循环结束");
输出结果:
--- do-while 循环 ---
do-while 循环体被执行
do-while 循环结束
分析:因为 do-while 循环是“先执行”,所以无论条件是否满足,循环体都会被执行一次,执行完后,i 变为 11,再判断 11 < 5 为 false,循环结束。
实际应用场景
do-while 循环最常见的应用场景是输入验证。
示例:要求用户输入一个 1 到 100 之间的数字,如果输入无效则要求重新输入。
import java.util.Scanner;
public class DoWhileExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int number = 0;
// 使用 do-while 确保提示信息至少显示一次
do {
System.out.print("请输入一个 1 到 100 之间的数字: ");
number = scanner.nextInt();
// 检查输入是否有效
if (number < 1 || number > 100) {
System.out.println("输入无效,请重新输入!");
}
} while (number < 1 || number > 100); // 如果输入无效,条件为 true,继续循环
System.out.println("恭喜!您输入了有效的数字: " + number);
scanner.close();
}
}
程序运行示例:
请输入一个 1 到 100 之间的数字: 0
输入无效,请重新输入!
请输入一个 1 到 100 之间的数字: 150
输入无效,请重新输入!
请输入一个 1 到 100 之间的数字: 50
恭喜!您输入了有效的数字: 50
在这个例子中,我们必须先向用户显示提示信息并获取输入,然后才能判断输入是否有效。“先执行,后判断”的 do-while 循环是完美选择。
注意事项
-
分号 不能少:
do-while循环的while语句末尾必须有一个分号。// 正确 do { // ... } while (condition); // 错误!编译器会报错 do { // ... } while (condition) -
避免无限循环:确保循环体内的代码能够最终改变条件表达式的值,使其变为
false,否则循环将永远执行下去,导致程序“卡死”。// 这是一个无限循环的例子! int count = 1; do { System.out.println("Count: " + count); // 忘记在这里增加 count 的值 } while (count <= 10); // count 永远是 1,条件永远为 true
do-while循环:先执行一次循环体,然后再判断条件,如果条件为true,则继续循环。- 核心特点:循环体至少执行一次。
- 语法:
do { ... } while (condition); - 最佳实践:适用于需要先执行操作再进行判断的场景,尤其是输入验证,当循环体可能一次都不需要执行时,应使用
while循环。
