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
是一个非常强大的工具,特别适合用于有多个选项的决策场景。掌握它能让我们的代码更简洁、逻辑更清晰!✅🚀