Appearance
6.5 switch 语句
switch 语句的概念
switch 语句是 Java 中用于多分支选择的语句,它根据表达式的值来选择执行哪个代码块。与 if…else if…else 语句相比,switch 语句在处理多个固定值的情况时更加简洁易读。
switch 语句的语法
java
switch (表达式) {
case 值1:
// 表达式等于值1时执行的代码
break;
case 值2:
// 表达式等于值2时执行的代码
break;
case 值3:
// 表达式等于值3时执行的代码
break;
default:
// 表达式不等于任何case值时执行的代码
break;
}- 表达式:返回一个值的表达式,类型可以是 byte、short、int、char、String 或枚举类型
- case:表示一个分支,后面跟一个值
- break:用于结束当前 case 分支的执行
- default:当表达式不等于任何 case 值时执行的代码(可选)
switch 语句的使用
基本用法
java
public class SwitchExample {
public static void main(String[] args) {
int day = 1;
switch (day) {
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("Tuesday");
break;
case 3:
System.out.println("Wednesday");
break;
case 4:
System.out.println("Thursday");
break;
case 5:
System.out.println("Friday");
break;
case 6:
System.out.println("Saturday");
break;
case 7:
System.out.println("Sunday");
break;
default:
System.out.println("Invalid day");
break;
}
}
}使用 String 类型
java
public class SwitchStringExample {
public static void main(String[] args) {
String fruit = "apple";
switch (fruit) {
case "apple":
System.out.println("Apple is red");
break;
case "banana":
System.out.println("Banana is yellow");
break;
case "grape":
System.out.println("Grape is purple");
break;
default:
System.out.println("Unknown fruit");
break;
}
}
}使用枚举类型
java
public class SwitchEnumExample {
enum Season {
SPRING, SUMMER, AUTUMN, WINTER
}
public static void main(String[] args) {
Season season = Season.SPRING;
switch (season) {
case SPRING:
System.out.println("Spring is beautiful");
break;
case SUMMER:
System.out.println("Summer is hot");
break;
case AUTUMN:
System.out.println("Autumn is colorful");
break;
case WINTER:
System.out.println("Winter is cold");
break;
default:
System.out.println("Unknown season");
break;
}
}
}switch 语句的执行流程
- 计算表达式的值
- 依次与每个 case 的值进行比较
- 如果找到匹配的 case,执行对应的代码块
- 遇到 break 语句时,跳出 switch 语句
- 如果没有找到匹配的 case,执行 default 代码块(如果有)
switch 语句的注意事项
1. break 语句的作用
break 语句用于结束当前 case 分支的执行,防止执行下一个 case 分支。如果没有 break 语句,会继续执行下一个 case 分支,直到遇到 break 语句或 switch 语句结束。
java
public class SwitchWithoutBreakExample {
public static void main(String[] args) {
int number = 2;
switch (number) {
case 1:
System.out.println("One");
// 没有 break
case 2:
System.out.println("Two");
// 没有 break
case 3:
System.out.println("Three");
break;
default:
System.out.println("Other");
break;
}
}
}输出结果:
Two
Three2. case 值的唯一性
每个 case 的值必须是唯一的,不能重复。
3. 表达式类型
switch 语句的表达式类型可以是:
- 基本数据类型:byte、short、int、char
- 引用数据类型:String、枚举类型
4. default 分支
default 分支是可选的,当表达式不等于任何 case 值时执行。
switch 语句的应用场景
1. 菜单选择
java
int choice = 1;
switch (choice) {
case 1:
// 执行选项 1
break;
case 2:
// 执行选项 2
break;
case 3:
// 执行选项 3
break;
default:
// 无效选项
break;
}2. 状态处理
java
String status = "pending";
switch (status) {
case "pending":
// 处理待处理状态
break;
case "processing":
// 处理处理中状态
break;
case "completed":
// 处理已完成状态
break;
default:
// 处理未知状态
break;
}3. 月份处理
java
int month = 1;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println("31 days");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println("30 days");
break;
case 2:
System.out.println("28 or 29 days");
break;
default:
System.out.println("Invalid month");
break;
}示例:switch 语句的使用
java
public class SwitchApplication {
public static void main(String[] args) {
// 数字转换为星期
int day = 5;
switch (day) {
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("Tuesday");
break;
case 3:
System.out.println("Wednesday");
break;
case 4:
System.out.println("Thursday");
break;
case 5:
System.out.println("Friday");
break;
case 6:
System.out.println("Saturday");
break;
case 7:
System.out.println("Sunday");
break;
default:
System.out.println("Invalid day");
break;
}
// 字符串匹配
String grade = "A";
switch (grade) {
case "A":
System.out.println("Excellent");
break;
case "B":
System.out.println("Good");
break;
case "C":
System.out.println("Average");
break;
case "D":
System.out.println("Pass");
break;
case "F":
System.out.println("Fail");
break;
default:
System.out.println("Invalid grade");
break;
}
// 月份天数
int month = 2;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(month + " has 31 days");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println(month + " has 30 days");
break;
case 2:
System.out.println(month + " has 28 or 29 days");
break;
default:
System.out.println("Invalid month");
break;
}
}
}常见问题
1. 忘记添加 break 语句
症状:执行完一个 case 后,继续执行下一个 case
解决方案:在每个 case 分支的末尾添加 break 语句
2. case 值重复
症状:编译错误:error: duplicate case label
解决方案:确保每个 case 的值都是唯一的
3. 表达式类型不支持
症状:编译错误:error: incompatible types
解决方案:确保表达式的类型是 switch 语句支持的类型
4. 缺少 default 分支
症状:当表达式不等于任何 case 值时,没有默认处理
解决方案:添加 default 分支来处理未知情况
总结
switch 语句是 Java 中用于多分支选择的语句,它根据表达式的值来选择执行哪个代码块。与 if…else if…else 语句相比,switch 语句在处理多个固定值的情况时更加简洁易读。
在使用 switch 语句时,需要注意:
- 每个 case 分支末尾需要添加 break 语句
- case 值必须是唯一的
- 表达式类型必须是 switch 语句支持的类型
- 可以添加 default 分支来处理未知情况
通过合理使用 switch 语句,可以使程序的多分支选择逻辑更加清晰易读。
