目 录CONTENT

文章目录

Java 基础 - 7. switch 语句

李航
2025-12-10 / 0 评论 / 0 点赞 / 19 阅读 / 0 字

Java 基础 - 7. switch 语句

1. 引入

在我们编写程序时,条件判断是不可避免的。而在复杂的条件判断中,if...else if...else 虽然非常常见,但当有多个条件判断时,代码可能会变得冗长且不易维护。这时,switch 语句是一个更简洁且高效的选择。

switch 语句可以让你在多个值之间进行选择。它根据变量的不同值执行不同的代码块。


2. 介绍

switch 语句是 Java 中一种非常常见的条件判断语句,它可以用来替代多个 if...else 判断,特别是在需要判断多个固定值的情况下。

switch 语句可以对以下数据类型进行判断:

  • 整数类型(byteshortintchar
  • 枚举类型(enum
  • 字符串类型(String)【Java 7 及以后版本支持】
  • 不能用于浮动类型(floatdouble)和布尔类型(boolean

switch 语句的工作原理:

  1. switch 根据表达式的值跳转到相应的 case 标签。
  2. 执行 case 标签后面的代码。
  3. 如果没有 break,会继续执行后面的代码,直到遇到 breakswitch 结束。

3. 语法 + 案例

3.1 switch 语句的基本语法

switch (表达式) {
    case 值1:
        // 执行代码1
        break;
    case 值2:
        // 执行代码2
        break;
    case 值3:
        // 执行代码3
        break;
    default:
        // 如果没有匹配的值,执行的代码
}
  • 表达式:通常是一个变量,switch 会根据这个表达式的值来匹配对应的 case
  • case:每个 case 后跟着一个常量值。若表达式的值等于某个 case 的值,则执行该 case 后面的代码块。
  • break:用于跳出 switch 语句。如果省略 break,程序会继续执行下一个 case(这会导致意外的“fall-through”现象)。
  • default:可选的,它在没有匹配到任何 case 时执行。

3.2 switch 语句的简单示例

示例:根据星期几输出不同的消息

public class SwitchExample {
    public static void main(String[] args) {
        int day = 3;

        switch (day) {
            case 1:
                System.out.println("今天是星期一");
                break;
            case 2:
                System.out.println("今天是星期二");
                break;
            case 3:
                System.out.println("今天是星期三");
                break;
            case 4:
                System.out.println("今天是星期四");
                break;
            case 5:
                System.out.println("今天是星期五");
                break;
            case 6:
                System.out.println("今天是星期六");
                break;
            case 7:
                System.out.println("今天是星期天");
                break;
            default:
                System.out.println("输入错误!");
        }
    }
}

运行结果:

今天是星期三

在上面的代码中,变量 day 的值是 3,所以程序会跳到 case 3,输出 "今天是星期三"


3.3 switch 语句中没有 break 的情况

如果没有写 breakswitch 会继续执行下一个 case,这就是所谓的“fall-through”现象。

示例:没有 break 的情况

public class SwitchFallThrough {
    public static void main(String[] args) {
        int day = 3;

        switch (day) {
            case 1:
                System.out.println("今天是星期一");
            case 2:
                System.out.println("今天是星期二");
            case 3:
                System.out.println("今天是星期三");
            case 4:
                System.out.println("今天是星期四");
            default:
                System.out.println("输入错误!");
        }
    }
}

运行结果:

今天是星期三
今天是星期四
输入错误!

解释:由于没有 break,当程序进入 case 3 后,它会继续执行后面的所有 case。如果不希望这样,必须在每个 case 语句后加上 break


4. 代码说明

  1. switch 语句的表达式:表达式的结果会与每个 case 后面的常量值进行比较。如果找到了匹配项,就执行对应的 case 语句块。

  2. break 语句break 用来跳出 switch 语句块。如果没有 break,会出现“fall-through”现象,程序会继续执行下一个 case 代码。

  3. default 语句:可选的,如果所有 case 都没有匹配到,default 中的代码将会执行。


5. 练习题(含答案)


练习 1:月份转换

输入一个月份的数字(1~12),输出对应的月份名称。例如,输入 3 输出 March

参考答案:

import java.util.Scanner;

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

        System.out.print("请输入一个月份数字(1-12):");
        int month = scanner.nextInt();

        switch (month) {
            case 1:
                System.out.println("January");
                break;
            case 2:
                System.out.println("February");
                break;
            case 3:
                System.out.println("March");
                break;
            case 4:
                System.out.println("April");
                break;
            case 5:
                System.out.println("May");
                break;
            case 6:
                System.out.println("June");
                break;
            case 7:
                System.out.println("July");
                break;
            case 8:
                System.out.println("August");
                break;
            case 9:
                System.out.println("September");
                break;
            case 10:
                System.out.println("October");
                break;
            case 11:
                System.out.println("November");
                break;
            case 12:
                System.out.println("December");
                break;
            default:
                System.out.println("输入错误!");
        }
    }
}

练习 2:根据成绩判断等级

根据用户输入的成绩(0~100),判断其对应的等级:

  • 90~100:优秀
  • 70~89:良好
  • 60~69:及格
  • 0~59:不及格

参考答案:

import java.util.Scanner;

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

        System.out.print("请输入成绩:");
        int score = scanner.nextInt();

        switch (score / 10) {
            case 10:
            case 9:
                System.out.println("优秀");
                break;
            case 8:
            case 7:
                System.out.println("良好");
                break;
            case 6:
                System.out.println("及格");
                break;
            default:
                System.out.println("不及格");
        }
    }
}

练习 3:星期判断

输入一个星期的数字(1~7),输出对应的中文星期几。如果输入的数字不在 1 到 7 之间,输出“输入无效”。

参考答案:

import java.util.Scanner;

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

        System.out.print("请输入星期几(1-7):");
        int day = scanner.nextInt();

        switch (day) {
            case 1:
                System.out.println("星期一");
                break;
            case 2:
                System.out.println("星期二");
                break;
            case 3:
                System.out.println("星期三");
                break;
            case 4:
                System.out.println("星期四");
                break;
            case 5:
                System.out.println("星期五");
                break;
            case 6:
                System.out.println("星期六");
                break;
            case 7:
                System.out.println("星期天");
                break;
            default:
                System.out.println("输入无效");
        }
    }
}

0

评论区