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 语句中的表达式必须是 charbyteshortintCharacterByteShortIntegerString 或枚举类型。
    • 从 Java SE 7 开始,switch 语句支持 String 类型。
    • 从 Java 12 开始,引入了增强的 switch 表达式(预览特性,后在 Java 14 中成为正式特性),允许返回值,并且可以使用 yield 关键字代替 break
  3. 贯穿(fall-through)

    • 如果一个 case 块没有 break 语句,那么程序将继续执行下一个 case 块(如果有的话),直到遇到 breakswitch 语句的末尾。
    • 这通常是不期望的行为,因此建议每个 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 中的多种用途,包括根据变量的值选择执行不同的代码块、计算不同的结果以及根据用户输入执行不同的操作。

相关推荐
Theodore_10221 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
网易独家音乐人Mike Zhou2 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
安静读书2 小时前
Python解析视频FPS(帧率)、分辨率信息
python·opencv·音视频
冰帝海岸2 小时前
01-spring security认证笔记
java·笔记·spring
世间万物皆对象3 小时前
Spring Boot核心概念:日志管理
java·spring boot·单元测试
没书读了3 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
----云烟----3 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024063 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
小二·3 小时前
java基础面试题笔记(基础篇)
java·笔记·python
开心工作室_kaic4 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端