这两种循环都属于“条件循环”,意味着它们会反复执行一段代码,直到某个条件不再满足为止,它们的主要区别在于条件判断的时机。

while 循环
while 循环的特点是“先判断,后执行”。
在每次循环开始之前,程序都会先检查 while 后面的条件表达式,如果条件为 true,则执行循环体内的代码;如果条件为 false,则直接跳过整个循环,继续执行循环后面的代码。
语法结构
while (条件表达式) {
// 循环体 (当条件为 true 时,要执行的代码)
}
执行流程图
[开始]
|
V
[判断条件]
|
+----|----+
| | |
是 | 否
| | |
V | V
[执行循环体] [跳出循环]
| |
+---------+
|
V
[结束]
示例代码
示例1:打印 1 到 5 的数字
public class WhileLoopExample {
public static void main(String[] args) {
int i = 1; // 1. 初始化循环变量
// 2. 判断条件
while (i <= 5) {
System.out.println("当前数字是: " + i);
// 3. 更新循环变量 (非常重要!)
i++;
}
System.out.println("循环结束。");
}
}
输出结果:

当前数字是: 1
当前数字是: 2
当前数字是: 3
当前数字是: 4
当前数字是: 5
循环结束。
代码解析:
int i = 1;:在循环开始前,我们必须定义并初始化一个控制循环的变量(称为循环变量)。while (i <= 5):进入循环前,首先判断i是否小于或等于 5。- 第一次,
i是 1,条件为true,进入循环。 - 打印 "当前数字是: 1"。
i++执行后,i的值变为 2。- 第二次,再次判断
i <= 5,i是 2,条件为true,再次进入循环。 - ... 如此反复,直到
i变为 6。 - 当
i是 6 时,i <= 5的条件为false,循环终止,程序执行System.out.println("循环结束。");。
- 第一次,
⚠️ 重要警告:无限循环
如果你忘记在循环体内更新循环变量,或者更新的条件永远无法让循环条件变为 false,就会造成无限循环,程序将无法自己停下来。
// 这是一个无限循环的例子!
// int j = 1;
// while (j <= 5) {
// System.out.println("这会一直打印下去...");
// }
// // j 的值永远是 1,条件 j <= 5 永远为 true
do-while 循环
do-while 循环的特点是“先执行,后判断”。

无论循环条件一开始是否为 true,do-while 循环体内的代码至少会执行一次,执行完一次后,再判断条件,如果为 true,则继续下一次循环;如果为 false,则退出循环。
语法结构
do {
// 循环体 (至少会执行一次)
} while (条件表达式); // 注意:这里的分号 `;` 不能少!
执行流程图
[开始]
|
V
[执行循环体]
|
[判断条件]
|
+----|----+
| | |
是 | 否
| | |
V | V
[继续循环] [跳出循环]
| |
+---------+
|
V
[结束]
示例代码
示例1:打印 1 到 5 的数字
public class DoWhileLoopExample {
public static void main(String[] args) {
int k = 1; // 1. 初始化循环变量
do {
System.out.println("当前数字是: " + k);
// 3. 更新循环变量
k++;
} while (k <= 5); // 2. 判断条件 (注意分号!)
System.out.println("循环结束。");
}
}
输出结果:
当前数字是: 1
当前数字是: 2
当前数字是: 3
当前数字是: 4
当前数字是: 5
循环结束。
在这个例子中,while 和 do-while 的输出结果是一样的,因为条件 k <= 5 在第一次时就是 true。
示例2:条件一开始就为 false 的情况
这个例子能最好地体现 do-while 和 while 的区别。
public class DoWhileFalseExample {
public static void main(String[] args) {
int number = 10;
System.out.println("--- 使用 do-while 循环 ---");
do {
System.out.println("do-while 循环体内的代码被执行了!");
number++;
} while (number < 5); // 条件一开始就是 false (10 < 5)
System.out.println("\n--- 使用 while 循环 ---");
number = 10; // 重置变量
while (number < 5) { // 条件一开始就是 false (10 < 5)
System.out.println("while 循环体内的代码被执行了!");
number++;
}
System.out.println("\n两个循环都结束了。");
}
}
输出结果:
--- 使用 do-while 循环 ---
do-while 循环体内的代码被执行了!
--- 使用 while 循环 ---
两个循环都结束了。
结果分析:
do-while循环:即使条件number < 5一开始就是false,do块内的代码依然被执行了一次。while循环:因为条件一开始就是false,所以循环体一次都没有被执行,直接跳过。
while vs do-while:核心区别总结
| 特性 | while 循环 |
do-while 循环 |
|---|---|---|
| 执行顺序 | 先判断,后执行 | 先执行,后判断 |
| 执行次数 | 可能执行 0 次(如果条件一开始为 false) | 至少执行 1 次 |
| 语法结构 | while (条件) { ... } |
do { ... } while (条件); |
| 适用场景 | 当循环体可能不需要执行时使用。 | 当循环体必须至少执行一次时使用,从用户获取输入,直到输入有效为止。 |
do-while 的典型应用场景
假设你需要从用户那里获取一个有效的年龄输入(1 到 120 之间),使用 do-while 就非常合适,因为无论如何,你都需要先提示用户输入一次。
import java.util.Scanner;
public class DoWhileUserInput {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int age;
// 使用 do-while 确保至少执行一次输入和验证
do {
System.out.print("请输入您的年龄 (1-120): ");
age = scanner.nextInt();
if (age < 1 || age > 120) {
System.out.println("输入无效,请重新输入!");
}
} while (age < 1 || age > 120); // 如果输入无效,则继续循环
System.out.println("您输入的年龄是: " + age + ",有效!");
scanner.close();
}
}
for 循环 vs while / do-while 循环
为了更全面地理解,我们通常还会将 while 系列与 for 循环进行比较。
| 循环类型 | 适用场景 | 特点 |
|---|---|---|
for 循环 |
当你确切知道循环需要执行的次数时。 | 初始化、条件判断、变量更新这三部分代码都集中在一行,结构清晰,不易出错。 |
while 循环 |
当循环次数不确定,依赖于某个动态变化的条件时。 | 结构更灵活,初始化可以在循环前,更新可以在循环体内的任何位置。 |
do-while 循环 |
当循环体必须至少执行一次时。 | 保证了至少一次的执行,常用于输入验证等场景。 |
- 计数(如 1 到 100) -> 优先用
for。 - 条件驱动(如
while (isConnected)) -> 优先用while。 - 至少一次(如获取用户输入) -> 优先用
do-while。
希望这个详细的解释能帮助你完全理解 Java 中的 while 和 do-while 循环!
