基本语法格式
switch(表达式){
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
...
default:
执行语句n;
break;
}
程序执行原理:
程序由上到下执行,首先执行小括号中的表达式,得出一个常量值,将这个常量值与每个case语句后面的常量值进行匹配。如果与某个case语句中的常量值匹配上了(即两个常量值相等),那么就会执行对应case语句后面的语句,执行完语句后遇到break语句从而跳出整个switch结构,这时候switch结构就会终止执行;如果表达式中的常量值与任何一个case语句后面常量值都匹配不上,那么程序就会执行default后面的执行语句。
【案例1】:
从键盘输入1-7之间的任意数字,分别输出对应的信息
1——星期一
2——星期二
3——星期三
4——星期四
5——星期五
6——星期六
7——星期日import java.util.Scanner; public class SwitchDemo{ public static void main(String []args){ //判定星期的案例 System.out.println("请输入1~7之间的任意一个数字:"); Scanner sc = new Scanner(System.in); int weekDay = sc.nextInt();//从键盘获取用户输入 switch(weekDay){ 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("输入错误,请输入一个1~7的数字!"); } } }
运行结果示例
【案例2】
与【案例1】做一个类似比较体会一下,顺便认识两个方法toUpperCase()将字符串全部转换为大写,toLowerCase()将字符串全部转换为小写
import java.util.Scanner; public class Exercise_Switch { public static void main(String[] args) { System.out.println("请输入表示星期的英文单词:"); Scanner sc = new Scanner(System.in); String week = sc.next(); /* * 用户在输入表示星期的英文单词时,有输小写的,有输入大写的,有输入大小写混合的,为了统一 * 调用toLowerCase()方法将输入的单词全部转换为小写从而好与case中的相匹配 */ week=week.toLowerCase();//把字符串中的字符全部改为小写 switch (week) { case "monday": System.out.println("星期一"); break; case "tuesday": System.out.println("星期二"); break; case "wednesday": System.out.println("星期三"); break; case "thursday": System.out.println("星期四"); break; case "friday": System.out.println("星期五"); break; case "saturday": System.out.println("星期六"); break; case "sunday": System.out.println("星期日"); break; default : System.out.println("单词输入错误!"); } } }
运行结果
注意事项
注意事项1
switch语句中的表达式只能是byte、short、int、char、enum枚举、String类型的值,如果传入其他类型的值,程序会报错。
其中byet、short、int、char是在JDK1.6之前包括JDK1.6引入的,enum是JDK1.5引入的、String是JDK1.7引入的。
注意事项2
switch语句中可以省略break。如果省略掉所有的break,当表达式中的常量值与某个case语句中的常量值匹配到时,最终会从该case语句一直执行到最后一条语句。
【案例2】
import java.util.Scanner; public class SwitchDemo{ public static void main(String []args){ //判定星期的案例 System.out.println("请输入1~7之间的任意一个数字:"); Scanner sc = new Scanner(System.in); int weekDay = sc.nextInt();//从键盘获取用户输入 switch(weekDay){ case 1: System.out.println("星期一"); case 2: System.out.println("星期二"); case 3: System.out.println("星期三"); case 4: System.out.println("星期四"); case 5: System.out.println("星期五"); case 6: System.out.println("星期六"); case 7: System.out.println("星期日"); default: System.out.println("输入错误,请输入一个1~7的数字!"); } } }
运行结果示例
注:如果只是去掉某一个或者某几个break,程序也会遵循同样的原则,只有遇到break时才会跳出switch语句,否则就会一直执行到最后一条语句。
习题
【例题1】
下列语句执行后,z的值为?(选择一项)int x=3,y=4,z=0; switch(x%y+2){ case 0 : z=x*y; break; case 6 : z=x/y; break; case 12 : z=x-y; break; default : z=x*y-x; }
A:15
B:0
C:-2
D:9
解析:本题考查switch结构,x%y+2的值为5,没有匹配的case语句,故执行default语句, z = x ∗ y − x = 3 ∗ 4 − 3 = 9 z=x*y-x = 3*4-3=9 z=x∗y−x=3∗4−3=9
【例题2】
下列语句序列执行后,r的值是?(选择一项)char ch='8'; int r=10; switch(ch+1){ case '7' : r=r+3; case '8' : r=r+5; case '9' : r=r+6; break; default : r=r+8 }
A:13
B:15
C:16
D:18
解析:本题考查switch结构,关键点在于switch后面表达式值的计算,字符char在与int类型的数据进行计算的时候会自动转换为int类型
表达式ch+1其实就是 ‘8’+1 = 56+1=57,后续的多个case中只有’9’的转换为int类型后的值为57能与之相匹配上,所以会执行r=r+6得出r=16
当想要知道char类型的数据例如:'9’转换成int类型的值为多少时可以使用代码测试char ch = '9'; System.out.println(ch+0);//最终的计算结果确实为57
【例题3】下列语句序列执行后,k 的值是? (选择一项)
int x=6,y=10,k=5; switch(x%y){ case 0: k=x*y; case 6: k=x/y; case 12: k=x-y; default : k=x*y-x; }
A:60
B:5
C:0
D:54
解析:本题考查switch结构,x%y的值为6,执行case 6,k=6/10=0,没有结束语句,继续执行case12,k=x-y=-4,没有结束语句,继续执行default语句,k=x*y->x=60-6=54。故最终k的值为54,D选项正确。