do...while 语句详解
do...while 是后测试循环结构(也叫直到型循环),核心特点是:先执行循环体,再判断条件,因此循环体至少会执行一次。它广泛应用于 C/C++、Java、JavaScript、C# 等编程语言,语法和逻辑高度相似。
一、基本语法(通用格式)
java
运行
do {
// 循环体:需要重复执行的代码(可多行)
语句1;
语句2;
// (可选)循环控制:如计数器自增/自减,避免死循环
} while (条件表达式); // 注意:末尾的分号「;」必须加!
关键说明:
- 条件表达式:返回布尔值(true/false,C 语言中「非 0 为真,0 为假」);
- 循环体:即使条件一开始就不满足,也会先执行 1 次;
- 分号:
while()末尾的分号是语法要求,遗漏会导致编译 / 运行错误。
二、执行流程
- 先执行
do块内的循环体代码; - 计算
while后的条件表达式; - 若条件为
true(真),回到步骤 1,再次执行循环体; - 若条件为
false(假),退出循环,执行后续代码。
流程图简化:
plaintext
开始 → 执行循环体 → 判断条件?→ 是→回到循环体 | 否→结束循环
三、核心区别(vs while 循环)
| 特性 | while 循环 | do...while 循环 |
|---|---|---|
| 执行顺序 | 先判断条件,后执行循环体 | 先执行循环体,后判断条件 |
| 执行次数 | 可能 0 次(条件初始为假) | 至少 1 次(无论条件真假) |
| 语法 | 末尾无分号 | 末尾必须有分号 |
四、示例代码
示例 1:基础用法(输出 1~5)
java
运行
// Java 示例(C/C++/JavaScript 语法完全一致)
public class DoWhileDemo {
public static void main(String[] args) {
int i = 1; // 计数器
do {
System.out.println(i); // 先执行:输出1
i++; // 计数器自增
} while (i <= 5); // 再判断:i=2→5时继续,i=6时退出
}
}
输出结果:
plaintext
1
2
3
4
5
示例 2:条件初始为假(对比 while)
java
运行
public class CompareDemo {
public static void main(String[] args) {
int a = 10;
// 1. while 循环:条件初始为假,循环体一次都不执行
while (a < 5) {
System.out.println("while 执行了");
a--;
}
// 2. do...while 循环:条件初始为假,循环体仍执行1次
do {
System.out.println("do...while 执行了");
a--;
} while (a < 5);
}
}
输出结果:
plaintext
do...while 执行了
示例 3:避免死循环(必须有循环控制)
c
运行
// C语言示例:输入数字,直到输入0退出
#include <stdio.h>
int main() {
int num;
do {
printf("请输入一个数字(输入0退出):");
scanf("%d", &num);
printf("你输入了:%d\n", num);
} while (num != 0); // 输入0时条件为假,退出循环
return 0;
}
五、常见注意事项
-
不要遗漏分号:
while()末尾的分号是语法要求,新手易漏; -
循环体单行时 {} 可省略:但建议始终加 {},避免逻辑错误(如后续加代码时误判作用域);
java
运行
// 不推荐(易出错) do System.out.println(i); while (i <= 5); // 推荐 do { System.out.println(i); } while (i <= 5); -
避免死循环:循环体内必须有改变条件的逻辑(如
i++/num = 0),否则条件永远为真,循环无限执行; -
条件表达式简洁:避免复杂逻辑,提高可读性。