switch多分支语句

switch语句通用语法

在编程中,一个常见的问题就是检测一个变量是否符合某个条件,如果不符合,再用另一个值来检测,以此类推。当然,这种问题使用if条件语句也可以完成。

例如,使用 if 语句对考试成绩进行评估,关键代码如下:

if (grade == 'A') {
    System.out.println("真棒");
}
if (grade == 'B') {
    System.out.println("做得不错");
}

这个程序显得比较笨重,程序员需要测试不同的值来给出输出语句。在 Java 中,可以用 switch 语句将动作组织起来,以一个较简单明了的方式来实现 “多选一” 的选择。语法如下:

switch(表达式) {
  case 常量值1:
        语句块1
        [break;]
  ...
  case 常量值n:
        语句块n
        [break;]
  default:
        语句块n+1;
        [break;]
}

switch 语句中表达式的值必须是整型、字符型、字符串类型或枚举类型,常量值 1~n 的数据类型必须与表达式的值的类型相同。

switch 语句首先计算表达式的值,如果表达式的计算结果和某个 case 后面的常量值相同,则执行该 case 语句后的若干条语句,直到遇到 break 语句。此时,如果该 case 语句中没有 break 语句,则将继续执行后面 case 中的若干条语句,直到遇到 break 语句。若没有一个常量的值与表达式的值相同,则执行 default 后面的语句。default 语句为可选的,如果它不存在,且 switch 语句中表达式的值不与任何 case 的常量值相同,那么 switch 语句就不做任何处理。

(1) 同一条 switch 语句,case 的常量值必须互不相同。

(2) 在 switch 语句中,case 语句后的常量表达式的值可以为整数,但绝不可以是非整数的实数。例如,下面的代码就是错误的:

case 1.1:

switch 语句的执行过程如图4.6所示。

image 2024 02 28 13 46 28 845
Figure 1. 图4.6 switch语句的执行过程

【例4.4】使用switch语句为考试分数分级(实例位置:资源包\TM\sl\4\4)

创建 Grade 类,使用 Scanner 类在控制台中输入分数,然后用 switch 多分支语句判断输入的分数属于哪类成绩。10分和9分属于优,8分属于良,7分和6分属于中,5分、4分、3分、2分、1分以及0分均属于差。

import java.util.Scanner;						//引入Scanner类
public class Grade {
	public static void main(String[] args) { 
		Scanner sc = new Scanner(System.in); 		// 创建扫描器,接收控制台输入内容
		System.out.print("请输入成绩:");			// 输出字符串
		int grade = sc.nextInt();					// 获取控制台输入的数字
		switch (grade) {							// 使用switch判断数字
		case 10:									// 如果等于10,则继续执行下一行代码
		case 9:									// 如果等于9
			System.out.println("成绩为优");		// 输出成绩为优
			break;								// 结束判断
		case 8:									// 如果等于8
			System.out.println("成绩为良");		// 输出成绩为良
			break;								// 结束判断
		case 7:									// 如果等于7,则继续执行下一行代码
		case 6:										// 如果等于6
			System.out.println("成绩为中");			// 输出成绩为中
			break;									// 结束判断
		case 5:										// 如果等于5,则继续执行下一行代码
		case 4:										// 如果等于4,则继续执行下一行代码
		case 3:										// 如果等于3,则继续执行下一行代码
		case 2:										// 如果等于5,则继续执行下一行代码
		case 1:										// 如果等于1,则继续执行下一行代码
		case 0: 										// 如果等于0
			System.out.println("成绩为差");			// 输出成绩为差
			break;									// 结束判断
		default:										// 如果不符合以上任何一个结果
			System.out.println("成绩无效");			// 输出成绩无效
		}
		sc.close();									// 关闭扫描器
	}
}

运行结果如图4.7~图4.10所示。

image 2024 02 28 13 50 49 910
Figure 2. 图4.7 输入9,判断成绩为优
image 2024 02 28 13 51 30 576
Figure 3. 图4.8 输入7,判断成绩为中
image 2024 02 28 13 52 10 674
Figure 4. 图4.10 输入-1,判断成绩无效

switch表达式

switch 语句是用于条件判断、流程控制的组件。从例4.4中不难看出,switch 语句的写法显得非常笨拙。为了简化代码,Java 14 提供了一个新特性:switch 表达式。

下面演示如何使用 switch 表达式改写例 4.4。代码如下:

import java.util.Scanner;      // 导入 Scanner 类
public class Grade {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);  // 创建扫描器,接收在控制台中输入的内容
        int grade = sc.nextInt();
        String result = switch (grade) {
            case 10,9->"成绩为优";
            case 8->"成绩为良";
            case 7,6->"成绩为中";
            case 5,4,3,2,1,0->"成绩为差";
            default -> "成绩无效";
        };
        System.out.println(result);  // 关闭扫描器
        sc.close();
    }
}

编程训练(答案位置:资源包\TM\sl\4\编程训练)

【训练1】划分成绩等级 对一、二年级学生的考试成绩进行等级划分,等级划分标准如下:

  • “优秀”,大于或等于 90 分。

  • “良好”,大于或等于 80 分,小于 90 分。

  • “合格”,大于或等于 60 分,小于 80 分。

  • “不合格”,小于 60 分。

使用 if…else if 语句判断成绩等级并输出与该成绩对应的等级。

【训练2】判断月份对应的季节 使用 switch 多分支语句判断某个月份属于哪个季节。