do-while 循环
保证循环体至少执行一次的循环结构。先执行后判断,即使条件一开始就不满足也会执行一次。
基本语法
java
do {
// 循环体
} while (条件);执行流程:
┌─────────────────────┐
│ 执行循环体 │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ 条件判断 │
└──────────┬──────────┘
│
┌─────────┴─────────┐
│ │
true false
│ │
▼ ▼
┌─────────┐ ┌─────────┐
│返回循环体│ │ 结束 │
└─────────┘ └─────────┘基础用法
基本示例
java
int i = 1;
do {
System.out.println(i);
i++;
} while (i <= 5);
// 输出:1 2 3 4 5猜数字游戏
适合需要先执行再判断的场景。
java
import java.util.Scanner;
public class GuessNumber {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int secretNumber = 7;
int guess;
do {
System.out.print("请猜一个数字(1-10):");
guess = scanner.nextInt();
if (guess < secretNumber) {
System.out.println("太小了!");
} else if (guess > secretNumber) {
System.out.println("太大了!");
} else {
System.out.println("恭喜你,猜对了!");
}
} while (guess != secretNumber);
scanner.close();
}
}用户输入验证
确保用户输入在有效范围内。
java
import java.util.Scanner;
public class InputValidation {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int age;
do {
System.out.print("请输入年龄(0-150):");
age = scanner.nextInt();
if (age < 0 || age > 150) {
System.out.println("输入无效,请重新输入");
}
} while (age < 0 || age > 150);
System.out.println("您输入的年龄是:" + age);
scanner.close();
}
}while vs do-while
| 对比 | while | do-while |
|---|---|---|
| 首次执行 | 条件为 false 时不执行 | 至少执行一次 |
| 语法 | while(条件) | do { } while(条件); |
java
// while:条件为 false,一次都不执行
int i = 10;
while (i < 5) {
System.out.println("while: " + i);
i++;
}
// 输出:无
// do-while:先执行再判断,至少执行一次
int j = 10;
do {
System.out.println("do-while: " + j);
j++;
} while (j < 5);
// 输出:do-while: 10实战场景
菜单循环
java
import java.util.Scanner;
public class MenuDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int choice;
do {
System.out.println("\n=== 菜单 ===");
System.out.println("1. 查询");
System.out.println("2. 添加");
System.out.println("3. 删除");
System.out.println("4. 修改");
System.out.println("0. 退出");
System.out.print("请选择:");
choice = scanner.nextInt();
switch (choice) {
case 1: System.out.println("执行查询..."); break;
case 2: System.out.println("执行添加..."); break;
case 3: System.out.println("执行删除..."); break;
case 4: System.out.println("执行修改..."); break;
case 0: System.out.println("退出系统"); break;
default: System.out.println("无效选择");
}
} while (choice != 0);
scanner.close();
}
}文件读取
java
import java.io.*;
public class FileReadDemo {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(
new FileReader("data.txt"))) {
String line;
int lineNumber = 0;
do {
lineNumber++;
line = reader.readLine();
if (line != null) {
System.out.println(lineNumber + ": " + line);
}
} while (line != null);
} catch (IOException e) {
e.printStackTrace();
}
}
}注意事项
分号不能省略
do-while 结尾的分号是语法的一部分,容易遗漏。
java
// ❌ 错误:缺少分号
do {
System.out.println("test");
} while (condition)
// ✅ 正确
do {
System.out.println("test");
} while (condition);避免无限循环
确保循环条件有改变的可能。
java
// ❌ 错误:忘记更新条件变量
do {
System.out.println("无限循环");
} while (true);
// ✅ 正确
int count = 0;
do {
System.out.println(count++);
} while (count < 10);