Skip to content

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

对比whiledo-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);

基于 VitePress 构建