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 语句后的常量表达式的值可以为整数,但绝不可以是非整数的实数。例如,下面的代码就是错误的:
|
switch 语句的执行过程如图4.6所示。
【例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所示。
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 多分支语句判断某个月份属于哪个季节。