Java 零基础教程

Java 条件语句

条件判断语句赋予了你的代码“做决定”的能力,使其能够根据特定的条件执行不同的代码块。

条件语句为你的程序注入了逻辑和灵活性,让程序能够对各种输入和突发情况做出动态响应。如果没有条件语句,程序每次运行就只会像流水线一样,机械地执行完全相同的指令,无论输入的数据是什么。

本章将带你深入探索 Java 中的 ifelse ifelse 语句,为你提供编写更智能、适应性更强程序的必备工具。

1. 单分支:if 语句

if 语句是 Java 中最基础的条件控制语句。它允许你:只有在指定条件为真(true)时,才执行一段特定的代码

1.1 语法结构

if 语句的基本语法如下:

if (condition) {
    // 如果 condition (条件) 的结果为 true,则执行这里的代码
}
  • condition (条件): 这是一个布尔表达式,它的最终计算结果必须是 true 或者 false
  • {} (大括号): 用于包裹当条件满足时要执行的“代码块”。如果代码块里只有一行代码,大括号在语法上是可以省略的。但强烈建议永远不要省略大括号,这样代码更清晰,也能防止以后添加代码时引发低级错误。

1.2 代码示例

示例 1:基础的 if 语句

int age = 20;

if (age >= 18) {
    System.out.println("你已经具备投票资格。");
}
// 输出: 你已经具备投票资格。

在这个例子中,程序会评估条件 age >= 18。因为 age 的值是 20,条件成立 (true),所以控制台会打印出提示信息。

示例 2:使用布尔变量作为条件

boolean isRaining = true;

// 直接把 boolean 变量塞进去即可,不需要写 isRaining == true
if (isRaining) { 
    System.out.println("出门记得带把伞。");
}

2. 双分支:else 语句

else 语句永远跟在 if 语句的后面,它提供了一个“备用方案”:if 里面的条件为假 (false) 时,就执行 else 里面的代码

2.1 语法结构

if (condition) {
    // 如果条件为 true,执行这里
} else {
    // 如果条件为 false,执行这里
}

2.2 代码示例

示例 1:非此即彼的选择

int age = 16;

if (age >= 18) {
    System.out.println("你已经具备投票资格。");
} else {
    System.out.println("抱歉,你还没有到法定投票年龄。");
}
// 输出: 抱歉,你还没有到法定投票年龄。

因为 16 大于等于 18 这个条件是错的 (false),所以程序直接跳过了 if 块,执行了 else 块里的代码。

示例 2:判断奇数还是偶数

int number = 7;

if (number % 2 == 0) {
    System.out.println(number + " 是一个偶数。");
} else {
    System.out.println(number + " 是一个奇数。");
}

这个例子巧妙地使用了取模运算符 (%)。如果一个数除以 2 的余数是 0,那它就是偶数;否则必然是奇数。

3. 多分支:else if 语句

在现实世界中,选择题往往不止两个选项。else if 语句允许你串联检查多个不同的条件。它专门用于处理复杂的、有多种可能性的业务场景。

3.1 语法结构

if (condition1) {
    // 如果 条件1 为 true,执行这里
} else if (condition2) {
    // 如果 条件1 为 false,且 条件2 为 true,执行这里
} else if (condition3) {
    // 如果 条件1 和 2 为 false,且 条件3 为 true,执行这里
} else {
    // 如果以上所有条件全都不满足 (都是 false),执行这里的最终兜底方案
}

你可以写无数个 else if 块。最后的 else 块是可选的,通常用来做错误处理或默认保底。注意:一旦有任何一个条件满足,程序执行完对应的代码块后,就会立刻跳出整个 if-else 结构,不会再去检查后面的条件。

3.2 代码示例

示例 1:经典的成绩评定系统

int score = 85;

if (score >= 90) {
    System.out.println("等级: A");
} else if (score >= 80) {
    System.out.println("等级: B");
} else if (score >= 70) {
    System.out.println("等级: C");
} else if (score >= 60) {
    System.out.println("等级: D");
} else {
    System.out.println("等级: F (不及格)");
}
// 输出: 等级: B

示例 2:根据月份判断季节(结合逻辑运算符)

int month = 4; // 4月

if (month >= 3 && month <= 5) {
    System.out.println("季节: 春季");
} else if (month >= 6 && month <= 8) {
    System.out.println("季节: 夏季");
} else if (month >= 9 && month <= 11) {
    System.out.println("季节: 秋季");
} else if (month == 12 || month == 1 || month == 2) {
    System.out.println("季节: 冬季");
} else {
    System.out.println("错误:无效的月份");
}

这个例子展示了如何把上一章学的逻辑与 (&&) 和逻辑或 (||) 结合到条件判断中。

4. 嵌套的 if 语句 (Nested if)

你可以把一个 if 语句放进另一个 if 语句的内部。这叫嵌套。它用于在满足了一个大条件的前提下,继续深挖判断一些小条件。

4.1 代码示例

示例:复杂的资格审查

int age = 25;
boolean isCitizen = true;

// 第一层判断:年龄够不够?
if (age >= 18) {
    System.out.println("你已经达到了投票年龄。");
    
    // 第二层判断:只有在年龄够的前提下,才查你是不是公民
    if (isCitizen) {
        System.out.println("你也是合法公民,快去投票吧!");
    } else {
        System.out.println("但是你没有公民身份,所以还是不能投票。");
    }
    
} else {
    System.out.println("你太年轻了,不能投票。");
}

5. 业界最佳实践

  • 永远不要省去大括号 {}: 哪怕你的 if 后面只有一行代码,也请加上大括号。这能避免极具隐蔽性的 bug。
  • 保持条件简洁: 如果 if 括号里的逻辑表达式长得像一篇作文,把它拆分成几个语义清晰的 boolean 变量。
  • 严密的逻辑闭环: 在写 if - else if 时,务必考虑所有边界情况,最好加上一个 else 作为意料之外数据的保底处理。
  • 警惕“嵌套地狱”: 超过 3 层的嵌套 if 语句会让代码极度难读(也就是所谓的“箭头型代码”)。遇到这种情况,应该考虑尽早 return 或使用其他设计模式。