Java 基础 - 7. switch 语句
1. 引入
在我们编写程序时,条件判断是不可避免的。而在复杂的条件判断中,if...else if...else 虽然非常常见,但当有多个条件判断时,代码可能会变得冗长且不易维护。这时,switch 语句是一个更简洁且高效的选择。
switch 语句可以让你在多个值之间进行选择。它根据变量的不同值执行不同的代码块。
2. 介绍
switch 语句是 Java 中一种非常常见的条件判断语句,它可以用来替代多个 if...else 判断,特别是在需要判断多个固定值的情况下。
switch 语句可以对以下数据类型进行判断:
- 整数类型(
byte、short、int、char) - 枚举类型(
enum) - 字符串类型(
String)【Java 7 及以后版本支持】 - 不能用于浮动类型(
float、double)和布尔类型(boolean)
switch 语句的工作原理:
switch根据表达式的值跳转到相应的case标签。- 执行
case标签后面的代码。 - 如果没有
break,会继续执行后面的代码,直到遇到break或switch结束。
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 的情况
如果没有写 break,switch 会继续执行下一个 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. 代码说明
-
switch语句的表达式:表达式的结果会与每个case后面的常量值进行比较。如果找到了匹配项,就执行对应的case语句块。 -
break语句:break用来跳出switch语句块。如果没有break,会出现“fall-through”现象,程序会继续执行下一个case代码。 -
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("输入无效");
}
}
}
评论区