do-while循环
do-while是先执行后判断的循环结构。
do-while语法
基本格式
Java
do {
// 循环体
} while (条件); // 注意分号
// 执行流程:
// 1. 执行循环体
// 2. 判断条件
// 3. 条件为true:回到步骤1
// 4. 条件为false:结束循环
基本示例
Java
int i = 1;
do {
System.out.println(i);
i++;
} while (i <= 5);
// 输出:1, 2, 3, 4, 5
do-while执行流程
先执行后判断
Java
int i = 10;
do {
System.out.println(i); // 先执行,输出10
} while (i < 5); // 后判断,条件为false,结束
// do-while至少执行一次(即使条件初始为false)
执行过程示例
Java
int i = 1;
do {
System.out.println(i);
i++;
} while (i <= 3);
// 执行过程:
// 1. 执行循环体 → 输出1, i++
// 2. i=2, i<=3 ? true → 回到步骤1
// 3. 执行循环体 → 输出2, i++
// 4. i=3, i<=3 ? true → 回到步骤1
// 5. 执行循环体 → 输出3, i++
// 6. i=4, i<=3 ? false → 结束循环
do-while与while对比
执行顺序对比
| 特性 | do-while | while |
|---|---|---|
| 执行顺序 | 先执行后判断 | 先判断后执行 |
| 最少执行次数 | 至少1次 | 可能0次 |
| 条件初始为false | 执行1次后结束 | 不执行 |
Java
int i = 10;
// do-while:至少执行1次
do {
System.out.println(i); // 输出10
} while (i < 5);
// while:可能不执行
while (i < 5) {
System.out.println(i); // 不执行
}
使用场景对比
Java
// 需要至少执行一次:do-while
int input;
do {
input = getInput();
} while (input < 0); // 至少获取一次输入
// 可能不需要执行:while
while (hasData()) {
process(); // 可能不执行
}
do-while应用场景
输入验证
Java
Scanner scanner = new Scanner(System.in);
int age;
do {
System.out.print("请输入年龄:");
age = scanner.nextInt();
if (age < 0 || age > 150) {
System.out.println("年龄无效,请重新输入");
}
} while (age < 0 || age > 150);
System.out.println("有效年龄:" + age);
菜单选择
Java
Scanner scanner = new Scanner(System.in);
int choice;
do {
System.out.println("1. 新建");
System.out.println("2. 打开");
System.out.println("3. 退出");
System.out.print("请选择:");
choice = scanner.nextInt();
switch (choice) {
case 1: create(); break;
case 2: open(); break;
case 3: break;
default: System.out.println("无效选项");
}
} while (choice != 3);
System.out.println("退出系统");
确认操作
Java
Scanner scanner = new Scanner(System.in);
String confirm;
do {
performAction();
System.out.print("是否继续?(y/n)");
confirm = scanner.nextLine();
} while ("y".equalsIgnoreCase(confirm));
System.out.println("操作完成");
游戏回合
Java
boolean continueGame;
do {
playRound();
System.out.print("继续游戏?");
continueGame = getConfirm();
} while (continueGame);
System.out.println("游戏结束");
重试机制
Java
int attempts = 0;
boolean success;
do {
attempts++;
success = tryConnect();
if (!success) {
System.out.println("连接失败,重试...");
}
} while (!success && attempts < 3);
if (success) {
System.out.println("连接成功");
} else {
System.out.println("连接失败,超过最大尝试次数");
}
do-while循环控制
break跳出
Java
int i = 1;
do {
if (i == 5) {
break; // 跳出循环
}
System.out.println(i);
i++;
} while (i <= 10);
// 输出:1, 2, 3, 4
continue跳过
Java
int i = 0;
do {
i++;
if (i == 3) {
continue; // 跳过本次
}
System.out.println(i);
} while (i < 5);
// 输出:1, 2, 4, 5(跳过3)
do-while注意事项
分号不能省略
Java
int i = 1;
do {
System.out.println(i);
i++;
} while (i <= 5); // 分号必须有
// 省略分号会编译错误
// } while (i <= 5) // 错误
至少执行一次
Java
int i = 100;
do {
System.out.println(i); // 必定执行一次
} while (i < 5); // 条件为false
// 注意:即使条件初始为false,也执行一次
避免无限循环
Java
int i = 1;
// 错误:忘记更新,无限循环
// do {
// System.out.println(i);
// // 缺少i++
// } while (i <= 5);
// 正确:循环体内更新
do {
System.out.println(i);
i++;
} while (i <= 5);
do-while嵌套
嵌套do-while
Java
int i = 1;
do {
int j = 1;
do {
System.out.println(i + ", " + j);
j++;
} while (j <= 3);
i++;
} while (i <= 2);
与其他循环嵌套
Java
int row = 0;
do {
for (int col = 0; col < 5; col++) {
System.out.print("*");
}
System.out.println();
row++;
} while (row < 5);
do-while最佳实践
需要至少执行一次时用do-while
Java
// 输入验证:至少需要一次输入
int age;
do {
age = getAge();
} while (age < 0);
// 可能不需要执行时用while
while (hasData()) {
process(); // 可能不执行
}
简洁的条件表达式
Java
// 简洁条件
do {
process();
} while (needContinue());
// 不推荐复杂条件
// do {
// } while (a > 0 && b > 0 && c > 0);
确保条件能变为false
Java
int i = 1;
do {
System.out.println(i);
i++; // 确保更新,条件最终为false
} while (i <= 10);
三种循环对比总结
| 循环类型 | 执行顺序 | 最少执行 | 适用场景 |
|---|---|---|---|
| for | 先判断后执行 | 0次 | 确定次数、遍历 |
| while | 先判断后执行 | 0次 | 条件驱动、不确定次数 |
| do-while | 先执行后判断 | 1次 | 至少执行一次 |
Java
// 确定次数:for
for (int i = 0; i < 10; i++) { }
// 条件驱动、可能不执行:while
while (hasData()) { }
// 至少执行一次:do-while
do {
input = getInput();
} while (input < 0);
要点总结
- do {循环体} while(条件);:先执行后判断
- 至少执行一次(条件初始为false也执行一次)
- while后的分号不能省略
- 适合必须执行一次的场景
- 输入验证常用do-while
- 菜单选择、确认操作用do-while
- 重试机制可用do-while
- 条件驱动可能不执行用while
- 确定次数用for更简洁
- 循环体内必须更新条件变量
- 避免忘记更新导致无限循环
- break跳出,continue跳过
📝 发现内容有误?点击此处直接编辑