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

相关推荐
0思必得08 小时前
[Web自动化] Selenium处理动态网页
前端·爬虫·python·selenium·自动化
东东5168 小时前
智能社区管理系统的设计与实现ssm+vue
前端·javascript·vue.js·毕业设计·毕设
catino9 小时前
图片、文件的预览
前端·javascript
layman052811 小时前
webpack5 css-loader:从基础到原理
前端·css·webpack
半桔11 小时前
【前端小站】CSS 样式美学:从基础语法到界面精筑的实战宝典
前端·css·html
AI老李11 小时前
PostCSS完全指南:功能/配置/插件/SourceMap/AST/插件开发/自定义语法
前端·javascript·postcss
_OP_CHEN11 小时前
【前端开发之CSS】(一)初识 CSS:网页化妆术的终极指南,新手也能轻松拿捏页面美化!
前端·css·html·网页开发·样式表·界面美化
啊哈一半醒11 小时前
CSS 主流布局
前端·css·css布局·标准流 浮动 定位·flex grid 响应式布局
PHP武器库11 小时前
ULUI:不止于按钮和菜单,一个专注于“业务组件”的纯 CSS 框架
前端·css
电商API_1800790524711 小时前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫