跳到内容

元数据卡

  • 前置知识:第3章 表达式与操作符(关系操作符和逻辑操作符)
  • 预计时间:10 分钟
  • 完成标志:能用 if/else/else if 写分支逻辑

今天的风有点凉。阿花拉着你来到村口那口老井前,说老陈师傅有话要讲。你探头往井里看了一眼,井壁上刻着几行字:

按顺序执行——你会走完这条路。 懂得选择——你才看得到岔路。

老陈站在井边,朝井里扔了块石头。咚——水声传上来,一个波纹。

"上一章你学会了让变量动起来——加、减、乘、除,组合出新的值。但你的程序到现在为止,还是一根直愣愣的直线:从上往下,一条命令接一条命令,遇到最后一行就结束。"

石头只会往下掉。但你是人——你会选择走哪条路。

这就是你的下一课:条件分支


遇到的问题:岔路口

阿花递给你一把铁剑和一块盾牌,指着村口的两条路。

"左边的路通往矿洞,挖得到铁矿——但里面有野狼。右边的路安全,但只有杂草。"

你想了一下。"如果我有武器,就去矿洞;否则走安全路。"

翻译成代码就是:

java
boolean hasWeapon = true;

if (hasWeapon) {
    System.out.println("走向矿洞——冒险!");
} else {
    System.out.println("走安全的路——怂了。");
}
python
hasWeapon = True

if hasWeapon:
    print("走向矿洞——冒险!")
else:
    print("走安全的路——怂了。")
cpp
#include <iostream>
using namespace std;

bool hasWeapon = true;

if (hasWeapon) {
    cout << "走向矿洞——冒险!" << endl;
} else {
    cout << "走安全的路——怂了。" << endl;
}

语言:Java 17+ 预期输出走向矿洞——冒险!你试试:把 hasWeapon 改成 false


多路分支:else if

现实中的选择往往不止两条路。把"成绩分数"映射到等级:

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("不及格——下回加油");
}
python
score = 85

if score >= 90:
    print("优秀")
elif score >= 80:
    print("良好")    # ← 走这条分支
elif score >= 60:
    print("及格")
else:
    print("不及格——下回加油")
cpp
#include <iostream>
using namespace std;

int score = 85;

if (score >= 90) {
    cout << "优秀" << endl;
} else if (score >= 80) {
    cout << "良好" << endl;
} else if (score >= 60) {
    cout << "及格" << endl;
} else {
    cout << "不及格——下回加油" << endl;
}

语言:Java 预期输出良好

执行逻辑:从上到下依次检查。碰到的第一个为 true 的条件,执行它的代码块,然后跳过剩下的所有 else ifelse

Python 差异: Python 不写 else if,用 elif。而且 Python 没有 else if 两个单词的写法——elif 是唯一选择。

C++ 差异: 语法与 Java 完全一致。唯一区别:C++ 的 if 条件可以接受整数(非 0 为 true),Java 只接受 boolean


花括号——写还是不写?

如果代码块只有一行,Java 允许省略花括号:

java
if (score >= 60)
    System.out.println("及格");
else
    System.out.println("不及格");

永远不要这样做。 为什么?三个月后你想加一行日志:

java
if (score >= 60)
    System.out.println("及格");
    System.out.println("发送通知"); // ← 它不在 if 里!永远执行!

缩进欺骗了你的眼睛。不加花括号的 if,只跟它身后的第一条语句是"一伙的"。这个问题每年让无数人在生产环境翻车。养成习惯:ifelse 永远带花括号。


旅人笔记

if → 做选择。else if → 多路选择。else → 兜底。花括号 → 永远别省。

控制流从这里开始——你的代码不再是一根直线,而是一棵能长出分枝的树。

→ 下一步:switch 多路分支

Built with VitePress | Software Systems Atlas