Skip to content

🔀 控制流程

控制流程概述

控制流程用于控制程序的执行顺序,主要包括:

  • 条件语句:if-else、switch
  • 循环语句:for、while、do-while
  • 跳转语句:break、continue、return

条件语句

if 语句

基本语法

java
if (条件) {
    // 条件为 true 时执行
}
java
int score = 85;
if (score >= 60) {
    System.out.println("及格");
}

if-else 语句

java
if (条件) {
    // 条件为 true 时执行
} else {
    // 条件为 false 时执行
}
java
int score = 85;
if (score >= 60) {
    System.out.println("及格");
} else {
    System.out.println("不及格");
}

if-else if-else 语句

java
if (条件1) {
    // 条件1 为 true 时执行
} else if (条件2) {
    // 条件2 为 true 时执行
} else {
    // 所有条件都为 false 时执行
}
java
int score = 85;
if (score >= 90) {
    System.out.println("优秀");
} else if (score >= 80) {
    System.out.println("良好");
} else if (score >= 60) {
    System.out.println("及格");
} else {
    System.out.println("不及格");
}

嵌套 if 语句

java
int age = 25;
boolean hasLicense = true;

if (age >= 18) {
    if (hasLicense) {
        System.out.println("可以开车");
    } else {
        System.out.println("需要驾照");
    }
} else {
    System.out.println("未满18岁,不能开车");
}

三元运算符(条件表达式)

java
// 语法:条件 ? 值1 : 值2
int score = 85;
String result = (score >= 60) ? "及格" : "不及格";
System.out.println(result);

switch 语句

基本语法

java
switch (表达式) {
    case 值1:
        // 代码块
        break;
    case 值2:
        // 代码块
        break;
    default:
        // 默认代码块
}

switch 示例

java
int day = 3;
switch (day) {
    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 5:
        System.out.println("星期五");
        break;
    default:
        System.out.println("周末");
}

switch 的 fall-through

java
int month = 2;
switch (month) {
    case 12:
    case 1:
    case 2:
        System.out.println("冬季");
        break;
    case 3:
    case 4:
    case 5:
        System.out.println("春季");
        break;
    case 6:
    case 7:
    case 8:
        System.out.println("夏季");
        break;
    case 9:
    case 10:
    case 11:
        System.out.println("秋季");
        break;
}

Java 14+ switch 表达式

java
// 传统 switch 语句
int day = 3;
String dayName;
switch (day) {
    case 1: dayName = "星期一"; break;
    case 2: dayName = "星期二"; break;
    default: dayName = "其他";
}

// Java 14+ switch 表达式
String dayName2 = switch (day) {
    case 1 -> "星期一";
    case 2 -> "星期二";
    case 3 -> "星期三";
    default -> "其他";
};

// 使用 yield 返回值
String dayName3 = switch (day) {
    case 1, 2, 3, 4, 5 -> {
        yield "工作日";
    }
    case 6, 7 -> {
        yield "周末";
    }
    default -> {
        yield "无效";
    }
};

循环语句

for 循环

基本语法

java
for (初始化; 条件; 更新) {
    // 循环体
}

for 循环示例

java
// 基本 for 循环
for (int i = 0; i < 5; i++) {
    System.out.println("i = " + i);
}

// 输出:0, 1, 2, 3, 4

// 倒序循环
for (int i = 5; i > 0; i--) {
    System.out.println("i = " + i);
}

// 步长不为 1
for (int i = 0; i < 10; i += 2) {
    System.out.println("i = " + i);
}

增强 for 循环(for-each)

java
// 遍历数组
int[] arr = {1, 2, 3, 4, 5};
for (int num : arr) {
    System.out.println(num);
}

// 遍历集合
List<String> list = Arrays.asList("a", "b", "c");
for (String str : list) {
    System.out.println(str);
}

while 循环

基本语法

java
while (条件) {
    // 循环体
}

while 循环示例

java
int i = 0;
while (i < 5) {
    System.out.println("i = " + i);
    i++;
}

// 无限循环
while (true) {
    // 需要 break 退出
    if (condition) {
        break;
    }
}

do-while 循环

基本语法

java
do {
    // 循环体(至少执行一次)
} while (条件);

do-while 示例

java
int i = 0;
do {
    System.out.println("i = " + i);
    i++;
} while (i < 5);

// 即使条件为 false,也会执行一次
int j = 10;
do {
    System.out.println("j = " + j);  // 会执行一次
    j++;
} while (j < 5);

跳转语句

break 语句

用于跳出循环或 switch 语句:

java
// 跳出循环
for (int i = 0; i < 10; i++) {
    if (i == 5) {
        break;  // 跳出循环
    }
    System.out.println(i);  // 输出:0, 1, 2, 3, 4
}

// 跳出 switch
int day = 3;
switch (day) {
    case 3:
        System.out.println("星期三");
        break;  // 跳出 switch
}

带标签的 break

java
outer: for (int i = 0; i < 3; i++) {
    inner: for (int j = 0; j < 3; j++) {
        if (i == 1 && j == 1) {
            break outer;  // 跳出外层循环
        }
        System.out.println("i=" + i + ", j=" + j);
    }
}

continue 语句

用于跳过当前循环的剩余部分,继续下一次循环:

java
// 跳过某些迭代
for (int i = 0; i < 10; i++) {
    if (i % 2 == 0) {
        continue;  // 跳过偶数
    }
    System.out.println(i);  // 只输出奇数:1, 3, 5, 7, 9
}

带标签的 continue

java
outer: for (int i = 0; i < 3; i++) {
    inner: for (int j = 0; j < 3; j++) {
        if (j == 1) {
            continue outer;  // 继续外层循环的下一次迭代
        }
        System.out.println("i=" + i + ", j=" + j);
    }
}

return 语句

用于从方法中返回:

java
public int findIndex(int[] arr, int target) {
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] == target) {
            return i;  // 找到即返回
        }
    }
    return -1;  // 未找到返回 -1
}

嵌套循环

java
// 打印九九乘法表
for (int i = 1; i <= 9; i++) {
    for (int j = 1; j <= i; j++) {
        System.out.print(j + "×" + i + "=" + (i * j) + "\t");
    }
    System.out.println();  // 换行
}

// 输出:
// 1×1=1
// 1×2=2   2×2=4
// 1×3=3   2×3=6   3×3=9
// ...

实际应用示例

示例 1:查找最大值

java
int[] arr = {3, 7, 2, 9, 1, 5};
int max = arr[0];

for (int i = 1; i < arr.length; i++) {
    if (arr[i] > max) {
        max = arr[i];
    }
}
System.out.println("最大值: " + max);

示例 2:判断素数

java
int num = 17;
boolean isPrime = true;

if (num < 2) {
    isPrime = false;
} else {
    for (int i = 2; i <= Math.sqrt(num); i++) {
        if (num % i == 0) {
            isPrime = false;
            break;
        }
    }
}

if (isPrime) {
    System.out.println(num + " 是素数");
} else {
    System.out.println(num + " 不是素数");
}

示例 3:计算阶乘

java
int n = 5;
long factorial = 1;

for (int i = 1; i <= n; i++) {
    factorial *= i;
}
System.out.println(n + "! = " + factorial);  // 120

示例 4:斐波那契数列

java
int n = 10;
int first = 0, second = 1;

System.out.print("斐波那契数列: " + first + " " + second + " ");

for (int i = 2; i < n; i++) {
    int next = first + second;
    System.out.print(next + " ");
    first = second;
    second = next;
}

示例 5:菜单选择

java
Scanner scanner = new Scanner(System.in);
boolean running = true;

while (running) {
    System.out.println("请选择操作:");
    System.out.println("1. 添加");
    System.out.println("2. 删除");
    System.out.println("3. 查询");
    System.out.println("0. 退出");
    
    int choice = scanner.nextInt();
    
    switch (choice) {
        case 1:
            System.out.println("执行添加操作");
            break;
        case 2:
            System.out.println("执行删除操作");
            break;
        case 3:
            System.out.println("执行查询操作");
            break;
        case 0:
            running = false;
            System.out.println("退出程序");
            break;
        default:
            System.out.println("无效选择");
    }
}

循环最佳实践

1. 选择合适的循环类型

java
// 已知循环次数 → 使用 for
for (int i = 0; i < 10; i++) { }

// 未知循环次数,先判断条件 → 使用 while
while (condition) { }

// 至少执行一次 → 使用 do-while
do { } while (condition);

// 遍历集合 → 使用 for-each
for (String item : list) { }

2. 避免无限循环

java
// ❌ 错误:缺少更新语句
int i = 0;
while (i < 10) {
    System.out.println(i);
    // 忘记 i++
}

// ✅ 正确
int i = 0;
while (i < 10) {
    System.out.println(i);
    i++;
}

3. 合理使用 break 和 continue

java
// 使用 break 提前退出
for (int i = 0; i < 100; i++) {
    if (found) {
        break;  // 找到后立即退出
    }
}

// 使用 continue 跳过不必要的处理
for (int i = 0; i < 100; i++) {
    if (shouldSkip(i)) {
        continue;  // 跳过当前迭代
    }
    process(i);
}

完整示例

java
public class ControlFlowDemo {
    public static void main(String[] args) {
        // if-else 示例
        int score = 85;
        if (score >= 90) {
            System.out.println("优秀");
        } else if (score >= 80) {
            System.out.println("良好");
        } else {
            System.out.println("需要努力");
        }
        
        // switch 示例
        int day = 3;
        switch (day) {
            case 1, 2, 3, 4, 5 -> System.out.println("工作日");
            case 6, 7 -> System.out.println("周末");
            default -> System.out.println("无效");
        }
        
        // for 循环示例
        System.out.println("for 循环:");
        for (int i = 0; i < 5; i++) {
            System.out.print(i + " ");
        }
        System.out.println();
        
        // while 循环示例
        System.out.println("while 循环:");
        int j = 0;
        while (j < 5) {
            System.out.print(j + " ");
            j++;
        }
        System.out.println();
        
        // 嵌套循环示例
        System.out.println("嵌套循环:");
        for (int i = 1; i <= 3; i++) {
            for (int k = 1; k <= i; k++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

下一步

掌握了控制流程后,可以继续学习:


💡 提示:熟练掌握控制流程是编写复杂程序的基础,多练习不同类型的循环和条件判断