40. Java 使用 `switch` 语句进行分支选择

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)的情况。
  • 如果没有匹配到任何 casedefault 会被触发,输出一个默认值。

示例 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 :如果没有 breakswitch 会继续执行下一个 case 标签的代码,这就是我们前面提到的贯穿行为。
  • default 部分 :它是可选的,主要用于处理所有 case 都没有匹配时的情况。

总结一下,switch 是一个非常强大的工具,特别适合用于有多个选项的决策场景。掌握它能让我们的代码更简洁、逻辑更清晰!✅🚀

相关推荐
mapbar_front42 分钟前
面试问题—上家公司的离职原因
前端·面试
lang201509281 小时前
Spring Boot 官方文档精解:构建与依赖管理
java·spring boot·后端
昔人'1 小时前
css使用 :where() 来简化大型 CSS 选择器列表
前端·css
昔人'1 小时前
css `dorp-shadow`
前端·css
流***陌1 小时前
扭蛋机 Roll 福利房小程序前端功能设计:融合趣味互动与福利适配
前端·小程序
烛阴2 小时前
用 Python 揭秘 IP 地址背后的地理位置和信息
前端·python
前端开发爱好者2 小时前
尤雨溪官宣:"新玩具" 比 Prettier 快 45 倍!
前端·javascript·vue.js
why技术2 小时前
从18w到1600w播放量,我的一点思考。
java·前端·后端
欧阳呀2 小时前
Vue+element ui导入组件封装——超级优雅版
前端·javascript·vue.js·elementui
清风徐来QCQ2 小时前
css总结
前端