Java学习教程,从入门到精通,Java switch语句语法知识点(14)

1、Java switch 语句语法知识点

Java 中的 switch 语句是一种多分支选择结构,它允许一个变量(或表达式)与多个可能的常量值进行比较,并根据匹配的结果执行相应的代码块。以下是 switch 语句的关键语法点:

  1. 基本结构:

    java 复制代码
    switch (expression) {
        case value1:
            // 当 expression 等于 value1 时执行的代码
            break; // 可选,但通常建议加上以避免"贯穿"(fall-through)
        case value2:
            // 当 expression 等于 value2 时执行的代码
            break;
        // 可以有任意数量的 case 语句
        default:
            // 当 expression 不匹配任何 case 时执行的代码
            break; // 可选,但如果是最后一个语句则通常省略
    }
  2. 表达式类型:

    • 在 Java 7 及更早版本中,switch 语句中的表达式必须是 char、byte、short、int、Character、Byte、Short、Integer、String 或枚举类型。
    • 从 Java SE 7 开始,switch 语句支持 String 类型。
    • 从 Java 12 开始,引入了增强的 switch 表达式(预览特性,后在 Java 14 中成为正式特性),允许返回值,并且可以使用 yield 关键字代替 break。
  3. 贯穿(fall-through):

    • 如果一个 case 块没有 break 语句,那么程序将继续执行下一个 case 块(如果有的话),直到遇到 break 或 switch 语句的末尾。
    • 这通常是不期望的行为,因此建议每个 case 块都以 break 结尾(除非你有意利用贯穿特性)。
  4. default 语句:

    • default 语句是可选的,但它提供了一种处理所有不匹配 case 的情况的方法。
    • default 语句可以放在 switch 语句中的任何位置,但通常放在最后。

具体案例

以下是一个使用 Java switch 语句的示例,它根据用户输入的字符输出相应的消息:

java 复制代码
import java.util.Scanner;

public class SwitchExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入一个字符(A, B, C 或其他):");
        char inputChar = scanner.next().charAt(0); // 读取用户输入的第一个字符

        switch (inputChar) {
            case 'A':
                System.out.println("你输入了 A");
                break;
            case 'B':
                System.out.println("你输入了 B");
                break;
            case 'C':
                System.out.println("你输入了 C");
                break;
            default:
                System.out.println("你输入的不是 A、B 或 C");
                break;
        }

        scanner.close();
    }
}

在这个例子中,程序首先提示用户输入一个字符,然后使用 switch 语句根据输入的字符执行相应的代码块。如果用户输入的是 'A'、'B' 或 'C',程序将输出相应的消息。如果用户输入的是其他字符,程序将执行 default 代码块并输出一条不同的消息。

当然可以,以下是一些使用 Java switch 语句的具体案例:

案例一:判断星期几

java 复制代码
public class WeekdayExample {
    public static void main(String[] args) {
        int day = 3; // 假设今天是星期三
        String dayName;

        switch (day) {
            case 1:
                dayName = "Monday";
                break;
            case 2:
                dayName = "Tuesday";
                break;
            case 3:
                dayName = "Wednesday";
                break;
            case 4:
                dayName = "Thursday";
                break;
            case 5:
                dayName = "Friday";
                break;
            case 6:
                dayName = "Saturday";
                break;
            case 7:
                dayName = "Sunday";
                break;
            default:
                dayName = "Invalid day";
                break;
        }

        System.out.println("Today is: " + dayName);
    }
}

在这个例子中,switch 语句根据变量 day 的值选择相应的 case 分支,并输出对应的星期几。

案例二:计算工资扣税

java 复制代码
import java.util.Scanner;

public class TaxCalculation {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入工资(元):");
        double salary = scanner.nextDouble();

        double tax = 0;

        switch ((int) (salary / 1000)) { // 根据工资范围计算扣税比例
            case 0:
            case 1:
            case 2:
            case 3: // 工资3500及以下,扣税0
                tax = 0;
                break;
            case 4: // 工资3501-5000之间,扣税0.1%的超出部分
                tax = (salary - 3500) * 0.001;
                break;
            case 5: // 工资5001-8000之间,前3500不扣税,3501-5000扣0.1%,5001-8000扣0.2%
                tax = (5000 - 3500) * 0.001 + (salary - 5000) * 0.002;
                break;
            case 6: // 工资8001-10000之间,类似计算
                tax = (5000 - 3500) * 0.001 + (8000 - 5000) * 0.002 + (salary - 8000) * 0.003;
                break;
            default: // 工资10000以上
                tax = (5000 - 3500) * 0.001 + (8000 - 5000) * 0.002 + (10000 - 8000) * 0.003 + (salary - 10000) * 0.004;
                break;
        }

        System.out.printf("应扣税额为:%.2f元\n", tax);
        scanner.close();
    }
}

注意 :这个例子中的扣税计算是简化的,实际扣税规则可能更复杂。此外,由于 switch 语句不支持浮点数,这里使用了整数除法将工资范围划分到不同的区间。

案例三:根据用户输入执行不同操作

java 复制代码
import java.util.Scanner;

public class OperationSelector {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入操作选项(1: 加法,2: 减法,3: 乘法,4: 除法):");
        int option = scanner.nextInt();

        double num1, num2, result;

        System.out.print("请输入第一个数字:");
        num1 = scanner.nextDouble();

        System.out.print("请输入第二个数字:");
        num2 = scanner.nextDouble();

        switch (option) {
            case 1:
                result = num1 + num2;
                System.out.printf("结果是:%.2f\n", result);
                break;
            case 2:
                result = num1 - num2;
                System.out.printf("结果是:%.2f\n", result);
                break;
            case 3:
                result = num1 * num2;
                System.out.printf("结果是:%.2f\n", result);
                break;
            case 4:
                if (num2 != 0) {
                    result = num1 / num2;
                    System.out.printf("结果是:%.2f\n", result);
                } else {
                    System.out.println("除数不能为零!");
                }
                break;
            default:
                System.out.println("无效的操作选项!");
                break;
        }

        scanner.close();
    }
}

在这个例子中,switch 语句根据用户输入的操作选项执行相应的数学运算,并输出结果。

这些案例展示了 switch 语句在 Java 中的多种用途,包括根据变量的值选择执行不同的代码块、计算不同的结果以及根据用户输入执行不同的操作。

相关推荐
可乐鸡翅yeah_1 分钟前
HLS 分片过期清理,直播旧 TS 分片磁盘爆满问题处理
java·后端·spring·m3u8·m3u8在线·音视频在线播放
旋生万物14 分钟前
螺旋角分布的功率谱分析:多窗谱 + FDR 校正
开发语言·python
sunoo-22914 分钟前
【ARM嵌入式学习笔记第十天】i.MX6ULL eLCDIF控制器驱动RGB LCD全解析(硬件原理+寄存器配置+裸机代码)
arm开发·笔记·学习
沫璃染墨25 分钟前
《从零入门Linux系统篇(五十七):线程篇·十——生产者消费者模型进阶:从环形缓冲区到POSIX信号量》
linux·运维·服务器·开发语言·c++·系统架构·信号处理
时间的拾荒人30 分钟前
Qt 窗口系统详解:从菜单栏到对话框的完整指南
开发语言·qt·面试
专业程序开发源33 分钟前
SSM校园拍摄交流服务平台36936-计算机课程设计、毕业设计
java·spring boot·后端·python·elasticsearch·php·课程设计
用户0942485680335 分钟前
第23章:OpenJDK逃逸分析、标量替换与锁优化
java·jvm
wuminyu37 分钟前
LockStack在虚拟线程Mount和Unmount拷贝过程剖析
java·linux·c语言·jvm·c++
樱花落木兰1 小时前
分布式登录实战:Session 会话共享改造,Redis 存储用户登录状态
java·javascript·数据库·redis·分布式·缓存
wuyk5551 小时前
Python 网络爬虫入门到实战 第 04 章:请求头、UA 伪装、超时、异常处理、基础反爬绕过
开发语言·爬虫·python