switch语句
结构
switch(表达式){
case 常量1:
语句1;break;
case 常量2:
语句2;break;
...
default:
语句n;
}
执行原理:
程序由上到下执行,首先执行小括号中的表达式,得出一个常量值,然后再执行后续的case语句,如果表达式中的常量值与某个case语句中的常量的值匹配上了即两个常量值相等。那么就会执行对应case后面的语句,遇到break语句后就跳出整个switch结构,这时候switch结构就会终止执行;如果表达式中的常量值与任何一个case后面常量的值都匹配不上,那么程序就会执行default语句中的语句。
switch语句中可以省略break,不过这样switch语句就会一直执行到最后一条语句。
也可以省略default语句如果表达式中的常量值与任何一个case后面常量的值都匹配不上并且程序中没有编写default语句那么switch语句就会终止执行。
在JDK6.0以前(包括JDK6.0)switch后面的表达式的计算结果只允许是int或者与int等价的数据类型(byte、short、int、char),但是在JDK7.0以后表达式的值也可以是String类型。
【例题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=xy-x=34-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选项正确。
![](/qrcode.jpg)
【案例1】:
从键盘输入1-7之间的任意数字,分别输出对应的信息
1——星期一
2——星期二
3——星期三
4——星期四
5——星期五
6——星期六
7——星期日
package com.jinglan.select;
import java.util.Scanner;
public class Exercise_Switch {
public static void main(String[] args) {
System.out.println("请输入1-7之间的任意一个数字:");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
switch (num) {
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()将字符串全部转换为小写
package com.jinglan.select;
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("单词输入错误!");
}
}
}
运行结果