Java流程控制:从条件判断到循环遍历

Java 流程控制:从条件判断到循环遍历(核心总结 + 实战要点)

Java 的流程控制语句主要分为三大类:

  1. 条件判断(选择结构)
  2. 循环结构(重复执行)
  3. 跳转语句(控制流程走向)

下面按重要程度和使用频率逐一讲解,附带常见误区和最佳实践。

一、条件判断(选择结构)

1. if 语句(最常用)

// 基本形式
if (条件) {
    // 条件为 true 时执行
}

// 带 else
if (条件) {
    // true
} else {
    // false
}

// 多分支
if (条件1) {
    // ...
} else if (条件2) {
    // ...
} else if (条件3) {
    // ...
} else {
    // 都不满足
}

注意事项

  • 条件必须是 boolean 类型(不能写 if (a = 5)
  • 大括号 {} 强烈建议始终写上,即使只有一行代码(防止后续维护出错)

经典错误示例(新手高频坑):

int score = 85;
if (score >= 90)
    System.out.println("优秀");
    System.out.println("恭喜!");   // 这行无条件执行!!!

正确写法:加 {} 或写成一行

2. switch 语句(多分支选择)

JDK 早期版本(经典写法)

int day = 3;
switch (day) {
    case 1:
        System.out.println("星期一");
        break;
    case 2:
        System.out.println("星期二");
        break;
    default:
        System.out.println("其他");
        break;
}

JDK 12+ 增强版(推荐使用) → switch 表达式(更简洁)

String result = switch (day) {
    case 1, 2, 3, 4, 5 -> "工作日";
    case 6, 7           -> "周末";
    default             -> "非法输入";
};

switch 表达式特点

  • 使用 ->(箭头语法)
  • 自动结束(不需要 break)
  • 可以直接赋值给变量
  • 支持 yield 返回值(更复杂情况)
String desc = switch (score / 10) {
    case 10, 9 -> "优秀";
    case 8     -> "良好";
    case 7     -> "中等";
    default    -> {
        yield "不及格";   // 多语句时用 yield
    }
};

二、循环结构(重复执行)

1. while 循环(先判断后执行)

int i = 1;
while (i <= 10) {
    System.out.println(i);
    i++;
}

适用场景:不知道要循环多少次(比如读文件、等待输入)

2. do-while 循环(先执行后判断)

int i = 1;
do {
    System.out.println(i);
    i++;
} while (i <= 10);

特点至少执行一次(即使条件一开始就不成立)

经典使用场景:菜单选择系统(先显示菜单再判断用户输入)

3. for 循环(最常用,结构最清晰)

传统 for 循环

for (int i = 0; i < 10; i++) {
    System.out.println(i);
}

增强 for 循环(for-each) —— 遍历集合或数组首选

int[] arr = {10, 20, 30, 40};
for (int num : arr) {
    System.out.println(num);
}

List<String> names = Arrays.asList("张三", "李四", "王五");
for (String name : names) {
    System.out.println(name);
}

for 循环的几种常见写法对比

写法适用场景可否修改循环变量推荐指数
for (int i = 0; i < n; i++)需要索引、计数、步长控制可以★★★★★
for (int i = n-1; i >= 0; i--)逆序遍历可以★★★★☆
for (元素 : 集合/数组)只读遍历,不需要索引不能修改索引★★★★★
for(;;)死循环(配合 break 使用)★★★☆☆

三、跳转语句(改变正常执行流程)

语句作用常用场景注意事项
break跳出当前循环(单层)提前结束循环可配合标签跳出多层循环
continue跳过本次循环,进入下一次循环满足条件时跳过本次剩余代码只影响当前循环层
return结束整个方法,返回结果(或无返回)方法提前返回在循环中使用会直接结束方法

带标签的 break / continue(少用,但能解决嵌套循环问题)

outer: for (int i = 1; i <= 5; i++) {
    for (int j = 1; j <= 5; j++) {
        if (j == 3) {
            break outer;      // 直接跳出两层循环
            // continue outer; // 跳到外层循环下一轮
        }
        System.out.println(i + "-" + j);
    }
}

四、常见面试 / 易错点速记

  1. if 后面不要写分号 ;
    if (a > b); { ... } → 大括号内容无条件执行
  2. switch 漏写 break → case 穿透(有时故意用,有时是 Bug)
  3. for 循环中修改集合(add/remove) → ConcurrentModificationException 正确做法
  • 用迭代器删除:iterator.remove()
  • 收集要删除的元素后统一删除
  • for (int i = list.size()-1; i >= 0; i--) 逆序删除
  1. while(true) 死循环忘记 break
  2. 增强 for 循环中不能修改集合结构

五、快速练习题(建议动手写)

  1. 用 switch 表达式实现输入 1~12 返回对应月份的英文
  2. 打印 1~100 内所有 3 的倍数或 5 的倍数(用 continue 跳过不符合的)
  3. 用嵌套循环打印 9×9 乘法表
  4. 统计字符串中每个字符出现的次数(用数组或 HashMap)
  5. 求 1~1000 内所有“水仙花数”(三位数,每位数字立方和等于本身)

如果你想针对某个语句深入讲解(比如 switch 表达式的所有用法、for 循环的性能细节、多层循环的优化等),或者需要某道题的参考答案,可以直接告诉我,我继续展开。

文章已创建 4580

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部