在现实业务中,许多场景需要我们从多个固定的值中选出一个,执行该数值对应的操作。
switch (表达式){
case 目标值1:执行语句1;break;
case 目标值2:执行语句2;break;
......
case 目标值n:执行语句n;break;
default:执行语句n+1;break;
}
首先计算出表达式的值,其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
在上面的格式中,switch语句将表达式的值与每个case中的目标值进行匹配,如果找到了匹配的值,会执行对应case后的语句,如果没找到任何匹配的值,就会执行default后的语句。break的作用是跳出switch语句。
比如,在一周七天,当输入1-7会打印不同的星期。
/*
需求:键盘输入对应1-7,输出对应的中文日期
*/
import java.util.Scanner;
public class SwitchDemo01{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入星期对应的数字:");
int week = sc.nextInt();//2
switch(week){
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("您输入的数字有误!");break;
}
System.out.println("程序结束");
}
}
运行结果:
/*
需求:键盘输入对应1-7
1-5:输出工作日
6-7:输出休息日
*/
import java.util.Scanner;
public class SwitchDemo02{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入星期对应的数字:");
int week = sc.nextInt();//2
switch(week){
case 1:case 2:case 3:case 4:case 5:
System.out.println("工作日");break;
case 6:case 7:System.out.println("休息日");break;
default:System.out.println("您输入的数字有误!");break;
}
System.out.println("程序结束");
}
}
运行结果:
(1)switch表示这是switch语句
(2)表达式的取值只能是:byte,short,int,char,JDK5以后可以是枚举,JDK7以后可以是String
(3)如同if语句当中的else,default不是必须存在的,与if语句不同,switch语句只能完成具体值的选择,而不能指定取值区间,case后面跟的是要和表达式进行比较的值
(4)语句体部分可以是一条或多条语句
(5)break表示中断,结束的意思,可以结束switch语句,default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
(6)case条件只判断一次,在判断完一次case条件后,所有的case判断语句将不再起作用,而剩余语句正常执行。这是switch语句的穿透。