正在加载...

Java 中的 if 和 else

到目前为止,你保存过 true 或 false,或者用 && 这类记号从两边做出一个 true 或 false。那些页面仍然以一个名字下面的一个值结束。这一页把那个值用到别的事情上:Java 看 true 或 false,只运行其中一组行。做这个选择的工具是 if。另一组,在你需要时,是 else。

布尔值决定运行哪个块

创建一个小程序文件,名字叫 Gate.java。第一行的 public class 必须和文件名一致:public class Gate。不要在这个文件里保留旧的 Mint 类;编译器要求类名和文件名一致。
在 main 里,先保存一个 boolean,再选路径:
boolean ready = true;
这一行什么都不打印。它只是把单词 true 交给名字 ready。ready 以小写 r 开头。true 周围没有引号。分号结束这一保存行。然后才是选择本身:
if (ready) {
System.out.println("pass");
} else {
System.out.println("wait");
}
单词 if 是小写:先是 i,再是 f。它不是你自己起的名字。if 后面可以有空格;没有空格的 if(ready) 也能编译。圆括号里坐着名字 ready——没有引号,没有 ==,没有 &&。当 ready 保存的是 true 时,Java 进入第一对花括号,运行 System.out.println("pass");。pass 周围的引号标出给屏幕看的字母。你应该在屏幕上看到一行:pass。这次运行里,else 块被完全跳过。编译前先保存文件。

打印 pass 的程序

这是你先编译的版本。

ready 为 true

java
public class Gate {
    public static void main(String[] args) {
        boolean ready = true;
        if (ready) {
            System.out.println("pass");
        } else {
            System.out.println("wait");
        }
    }
}

在放着 Gate.java 的文件夹里运行 javac Gate.java。花括号和圆括号配对时,javac 自己不写任何一行。然后运行 java Gate——不是 java Gate.java。第二个命令不要带 .java 结尾。同样这两条命令在 Windows 和 macOS 上都适用;这一页不为任一系统要求不同的外壳拼写。程序应当打印 pass 并停下。它不会等你打字。如果终端在等键盘输入,说明文件里还留着旧练习的 nextLine 调用。删掉那个调用,保留 boolean 以及上面的 if / else。屏幕行不对,也不需要重新安装 JDK。

为什么是 pass 而不是 wait?因为圆括号里的测试是 true。这次运行里,Java 并不打印单词 true 本身。它打印的是选中花括号里 println 运行的内容。记住三件事:圆括号放测试,花括号把同属一条路径的行归在一起,只有 println 往屏幕写。如果屏幕显示 true,你多半还在打印 boolean 本身,或者 main 里还留着旧的组合记号演示。当 ready 为 true 时,把那行书写换成 if 花括号里的 println("pass")。

当 ready 为 false 时

只改保存的值:
boolean ready = false;
if / else 结构保持原样。现在测试不成立,所以 Java 跳过第一对花括号,改运行 else 的花括号。屏幕上应出现一行 wait。

ready 为 false

java
public class Gate {
    public static void main(String[] args) {
        boolean ready = false;
        if (ready) {
            System.out.println("pass");
        } else {
            System.out.println("wait");
        }
    }
}

再编译并运行:javac Gate.java,然后 java Gate。你应看到 wait。注意:你没有改写 if 行,也没有改写 else 行——只改了 ready 下面的值。看过 wait 之后,可以把 boolean ready = true; 放回去,回到第一个演示。两个版本都是合法的 Java。它们用相反的测试教同一种 if / else 形状。

再按顺序读一遍 false 那次运行。ready 保存 false。询问 if (ready)。答案是 false,所以第一对 { 与匹配的 } 之间的每一行都被跳过——包括 println("pass")。控制继续到 else。else 花括号之间的行会运行,于是执行 println("wait")。屏幕上只有一行。没有第二行。单词 false 本身不会出现,除非你故意打印它。

让选择保持清楚的规则

测试外面的圆括号是必需的。写成 if ready { … } 而没有圆括号,会让 javac 报错。这一页的测试是 boolean:像 ready 这样的名字,或者不带引号的裸 true、false。if ("true") 把字母放进本该是 boolean 测试的位置;javac 会报错。去掉引号,或者继续用 boolean 名字。单独一个整数,例如 if (1),不是本课保存就绪状态的方式;请留在 true、false 或 boolean 名字上。

花括号对读懂这一课很重要。这一页总是用 { } 包住每条路径。Java 允许没有花括号的单行 if,可一旦你在那个 if 下面再加第二行,没有花括号时只有第一行仍连着测试。初学者很容易漏掉这一点。两个演示都保留花括号,让每条路径一目了然:测试后一个开括号,else 前一个闭括号,然后 else 再一对。

else 属于 if。单独一个 else 会让 javac 报错。这一页里,一个 if 配一个 else。如果你只关心 true 路径,可以不写 else;第一个教学演示仍然两边都写,好让你看见分叉。在多个固定值之间选择是后面一页的 switch——这里不要再用另一个 else 发明第三条分支。

你也可以不单独起名就写测试:if (true) { … } else { … }。这样能编译并运行。演示用 ready,是为了让你看见已保存的 boolean 如何驱动选择——学会保存 true 和 false 之后,程序通常就是这个样子。像 if (score > 10) 这样的比较,等你熟悉了这个 true / false 分叉再学;这一页把测试保持为你已经理解的 boolean 值。

📊 ready 与屏幕

ready 屏幕
true pass
false wait

把表格当作运行之后的核对,而不是代替运行。第一个演示里 true 打印 pass。第二个演示里 false 打印 wait。如果两行 println 居然都跑了,是花括号或 if / else 配对有问题——修结构,不要重装 Java。

常见混淆是打印语法本身:System.out.println("if (ready)");。那会写出字符 if (ready)。它不会选择路径。另一种混淆是把 && 或 == 的演示留在同一个 main 里,然后奇怪屏幕为什么显示 true 而不是 pass。本课的 main 只应保留 boolean 和 if / else。

你现在能做什么

你可以保存一个 boolean,把它放进 if (…),并为每个结果写各自的花括号块。测试为 true 时,一个 println 运行;为 false 时,else 里的 println 运行。下一页是 switch,那里几个固定值各自有 case,而不是单一的 true / false 分叉。

🧠 测试您的知识

准备开始

测试您的知识

通过这个互动测验挑战自己,看看你对这个主题的理解程度如何

❓
5
问题
🎯
70%
及格要求
♾️
∞
时间
🔄
∞
尝试次数

📝 说明

  • 仔细阅读每个问题
  • 为每个问题选择最佳答案
  • 您可以随时重新参加测验
  • 您的进度将显示在顶部