40. Java 使用 switch 语句进行分支选择
使用 switch 语句进行分支选择
大家好!今天我们来聊一聊 Java 中非常常见的分支结构------switch 语句 。它是用来根据某个变量的值选择不同路径执行的方式。和 if-else 语句不同,switch 更适合处理多个可能的条件分支,能帮助我们更清晰地管理多重选择。
switch 语句的基本语法
让我们先看一下 switch 的基本写法:
java
switch (expression) {
case value1:
// 执行代码
break;
case value2:
// 执行代码
break;
...
default:
// 执行代码
}
expression:这是我们要检查的表达式,它会和每个case后的值进行比较。case标签 :每个case后跟着一个可能的值。如果表达式的结果和case后的值匹配,就执行对应的代码块。break:它的作用是终止switch语句,避免继续执行到下一个case。如果忘了加break,程序就会出现贯穿行为 (fall-through),也就是代码会继续执行下一个case。default:这是一个可选部分,当没有任何case匹配时,就会执行default后的代码。
示例 1:根据季度返回季节 🌸🌞🍂❄️
假设我们想根据季度来显示不同的季节,这时就可以使用 switch 语句。比如:
java
int quarter = 1; // 假设是第二季度
String quarterLabel = null;
switch (quarter) {
case 0: quarterLabel = "Q1 - Winter"; break;
case 1: quarterLabel = "Q2 - Spring"; break;
case 2: quarterLabel = "Q3 - Summer"; break;
case 3: quarterLabel = "Q4 - Fall"; break;
default: quarterLabel = "Unknown quarter"; break;
}
System.out.println(quarterLabel); // 输出:Q2 - Spring
解释:
switch语句会根据quarter的值选择不同的季节标签。- 每个
case后面都有一个break,这能避免出现"贯穿"(fall-through)的情况。 - 如果没有匹配到任何
case,default会被触发,输出一个默认值。
示例 2:使用 fall-through 处理多个相似的 case 🏁
有时候,不同的 case 可能执行相同的操作,我们可以把这些 case 写在一起。比如:
java
int month = 8;
List<String> futureMonths = new ArrayList<>();
switch (month) {
case 1: futureMonths.add("January");
case 2: futureMonths.add("February");
case 3: futureMonths.add("March");
case 4: futureMonths.add("April");
case 5: futureMonths.add("May");
case 6: futureMonths.add("June");
case 7: futureMonths.add("July");
case 8: futureMonths.add("August");
case 9: futureMonths.add("September");
case 10: futureMonths.add("October");
case 11: futureMonths.add("November");
case 12: futureMonths.add("December");
break;
default: break;
}
System.out.println(futureMonths); // 输出:["August", "September", "October", "November", "December"]
解释:
- 这里,我们没有在每个
case后面加break,导致贯穿 (fall-through)。所以,当month是 8 月时,程序不仅会输出"August",还会把之后的所有月份(9月到12月)都加进去。 - 这种行为可以有时很有用,但如果不小心,可能会导致错误!所以记得合理使用
break来控制流。
示例 3:计算月份的天数 🗓️
switch 语句还可以处理更复杂的逻辑,比如计算某个月份的天数。让我们来看一下如何计算一个月的天数,考虑到闰年的情况:
java
int month = 2; // 比如是 2 月
int year = 2021;
int numDays = 0;
switch (month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
numDays = 31; break;
case 4: case 6: case 9: case 11:
numDays = 30; break;
case 2:
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
numDays = 29; // 闰年
} else {
numDays = 28; // 非闰年
}
break;
default:
System.out.println("Invalid month.");
break;
}
System.out.println("Days in month " + month + ": " + numDays); // 输出:Days in month 2: 28
解释:
- 在这个例子中,我们用
switch语句来判断哪个月份有多少天。 - 对于
2月,我们进一步通过条件判断来确定是否为闰年,从而决定天数是28还是29天。
小结 🎯
switch语句:非常适合处理多个选择条件,可以让代码看起来更简洁、易读。break语句 :用于终止switch语句,避免出现fall-through错误。fall-through:如果没有break,switch会继续执行下一个case标签的代码,这就是我们前面提到的贯穿行为。default部分 :它是可选的,主要用于处理所有case都没有匹配时的情况。
总结一下,switch 是一个非常强大的工具,特别适合用于有多个选项的决策场景。掌握它能让我们的代码更简洁、逻辑更清晰!✅🚀