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

相关推荐
吴永琦(桂林电子科技大学)15 分钟前
HTML5
前端·html·html5
爱因斯坦乐17 分钟前
【HTML】纯前端网页小游戏-戳破彩泡
前端·javascript·html
恋猫de小郭23 分钟前
注意,暂时不要升级 MacOS ,Flutter/RN 等构建 ipa 可能会因 「ITMS-90048」This bundle is invalid 被拒绝
android·前端·flutter
大莲芒4 小时前
react 15-16-17-18各版本的核心区别、底层原理及演进逻辑的深度解析--react17
前端·react.js·前端框架
木木黄木木6 小时前
html5炫酷3D文字效果项目开发实践
前端·3d·html5
慕容莞青6 小时前
MATLAB语言的进程管理
开发语言·后端·golang
陈明勇6 小时前
用 Go 语言轻松构建 MCP 客户端与服务器
后端·go·mcp
Li_Ning217 小时前
【接口重复请求】axios通过AbortController解决页面切换过快,接口重复请求问题
前端
胡八一7 小时前
Window调试 ios 的 Safari 浏览器
前端·ios·safari
Dontla7 小时前
前端页面鼠标移动监控(鼠标运动、鼠标监控)鼠标节流处理、throttle、限制触发频率(setTimeout、clearInterval)
前端·javascript