跳转至

04 流程控制

本章目标

  • 掌握 if / else if / else 条件判断
  • 掌握 switch 分支
  • 掌握 for / while / do-while 循环
  • 掌握 break 与 continue

程序默认从上往下顺序执行,流程控制就是让程序"有选择地"执行、或"重复地"执行。

4.1 if 条件判断

基本形式

int age = 17;

if (age >= 18) {
    System.out.println("成年了");
} else {
    System.out.println("未成年");
}

多分支

int score = 85;

if (score >= 90) {
    System.out.println("优秀");
} else if (score >= 60) {
    System.out.println("及格");
} else {
    System.out.println("不及格");
}

if 的判断顺序

从上往下匹配,命中一个就结束,后面的不再判断。所以条件要按范围从窄到宽或从大到小写。

省略大括号

if (age >= 18)
    System.out.println("成年");   // 只有一行时可以省略 {}

新手建议永远写大括号,防止以后加代码加错位置。

4.2 switch 分支

适合"一个变量有多个固定取值"的情况:

int day = 3;
switch (day) {
    case 1:
        System.out.println("周一");
        break;              // 别忘了 break!
    case 2:
        System.out.println("周二");
        break;
    case 3:
        System.out.println("周三");
        break;
    default:
        System.out.println("其他");
}

fall-through(穿透)

如果不写 break,会继续执行下一个 case!这是新手最容易犯的错。比如上面 case 3 不写 break,会连 "周四" 的逻辑一起执行。

switch 表达式(Java 14+,推荐写法)

String dayName = switch (day) {
    case 1 -> "周一";
    case 2 -> "周二";
    case 3 -> "周三";
    default -> "其他";
};
System.out.println(dayName);

-> 写法不需要 break,更安全更简洁。Forge 1.20.1 用 Java 17,完全支持。

4.3 for 循环

基本形式

for (int i = 0; i < 5; i++) {
    System.out.println("第 " + i + " 次");
}
第 0 次
第 1 次
第 2 次
第 3 次
第 4 次

结构拆解:

for (初始化; 条件; 步进) {
    循环体
}
  1. 初始化:int i = 0(只执行一次)
  2. 条件:i < 5(每次循环前检查,false 就退出)
  3. 步进:i++(每次循环体结束后执行)

从大到小

for (int i = 10; i >= 0; i -= 2) {
    System.out.println(i);   // 10 8 6 4 2 0
}

增强 for(遍历集合,第 11 章常用)

String[] names = {"小明", "小红", "小刚"};
for (String name : names) {
    System.out.println(name);
}

4.4 while 与 do-while

while:先判断后执行(可能一次都不执行)

int hp = 100;
while (hp > 0) {
    hp -= 30;
    System.out.println("受到伤害,剩余 HP: " + hp);
}

do-while:先执行后判断(至少执行一次)

int n = 0;
do {
    System.out.println("n = " + n);
    n++;
} while (n < 3);

4.5 break 与 continue

  • break:跳出整个循环
  • continue:跳过本次循环,继续下一次
for (int i = 1; i <= 10; i++) {
    if (i == 3) continue;   // 跳过 3
    if (i == 7) break;      // 到 7 就停止
    System.out.println(i);  // 1 2 4 5 6
}

死循环怎么退出

while (true) {
    // 游戏循环、监听循环等
    if (条件) break;   // 必须有出口!
}

模组里经常用死循环 + break 的写法(比如不断尝试连接、不断查找)。

4.6 实战:模组场景

写一个"按 tick 执行"的逻辑(游戏 20 tick = 1 秒):

// 模拟:每 20 tick 恢复 1 点生命
int tick = 0;
while (tick < 100) {
    tick++;
    if (tick % 20 != 0) continue;   // 不是整秒就跳过
    System.out.println("恢复 1 点生命,tick = " + tick);
}

4.7 小练习

  1. 用 for 循环打印 1 到 100 的所有偶数
  2. 用 while 循环计算 1+2+...+100 的和
  3. 用 switch 把数字 1-7 转成中文星期
  4. 打印 9×9 乘法表(提示:嵌套 for 循环)

本章小结

  • if-else 处理范围判断,switch 处理固定取值
  • for 适合"知道次数",while 适合"不知道次数"
  • break 跳出循环,continue 跳过本次
  • switch 的 -> 写法更安全

下一章:05 数组

🏠 返回总站