switch分支结构
(1)基本语法:
switch(表达式){
case 常量1: //当表达式的值等于常量1,就执行 语句块1
语句块1;
break;
case 常量2;
语句块2;
break;
....
case 常量n;
语句块n;
break;
default:
default语句块;
break;
}
(2)语法介绍:
1、switch关键字,表示swtich分支
2、表达式 对应一个值
3、case常量1:当表达式的值等于常量1,就执行 语句块1
4、break:表示退出swtich
5、如果和 case 常量1匹配,就执行语句块1,如果没有匹配,就继续匹配 case 常量2
6、如果一个都没有匹配上,则执行default
(3)流程图:
案例练习:
(1)编写一个程序,该程序可以接收一个字符,比如:a,b,c,d,e,f,g。
(2)a表示星期一,b表示星期二......
(3)根据用户的输入显示相应的信息,要求使用switch语句完成
思路分析:
1、接收一个字符,创建Scanner对象
2、使用switch来完成匹配,并输出对应信息
代码实现:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入一个字符(a-g)表示星期数:");
char num = sc.next().charAt(0);
//在java中,只要是有值返回,就是一个表达式
switch(num){
case 'a':
System.out.println("星期一");
break;
case 'b':
System.out.println("星期二");
break;
case 'c':
System.out.println("星期三");
break;
case 'd':
System.out.println("星期四");
break;
case 'e':
System.out.println("星期五");
break;
case 'f':
System.out.println("星期六");
break;
case 'g':
System.out.println("星期天");
break;
default:
System.out.println("输入错误");
break;
}
}
(5)switch注意事项
1、表达式数据类型,应和case后的常量类型一致,或者是可以自动转成可以相互比较的类型,比如输入的是字符,而常量是int
2、switch(表达式)中表达式的返回值必须是:(byte,short,int,char,enum,String)
double c = 1,1;
switch(c){//错误
case 1.1://错误
System.out.println("ok3");
break;
3、case子句中的值必须是常量,而不能是变量
4、default子句是可选的,当没有匹配的case时,执行default,如果没有default子句,又没有匹配任何常量,则没有输出
5、break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有写break,程序会顺序执行到switch结尾,除非遇到break;
例:
char c='b';
char c2 = 'c';
switch(c){
case 'a':
System.out.println("执行第一次语句");
//break;
case 'b':
System.out.println("执行第二次语句");
//break;
default :
System.out.println("执行第三次语句");
}
System.out.println("退出switch");
//执行结果为:执行第二次语句,执行第三次语句
//因为没有break语句,所以执行完第二次语句,继续执行default语句,而default语句里依然没有break,则继续执行,直到退出switch语句
(6)switch练习:
(1)使用switch把小写类型的char型转为大写(键盘输入)。只转换a,b,c,d,e.其它的输出"other"。
(2)对学生成绩大于60分的,输出"合格"。低于60分的,输出"不合格"。(注:输入的成绩不能大于100),提示 成绩/60
(3)根据用于指定月份,打印该月份所属的季节。3,4,5春季;6,7,8夏季;9,10,11秋季;12,1,2冬季[提示:使用穿透]
①使用switch把小写类型的char型转为大写(键盘输入)。只转换a,b,c,d,e.其它的输出"other"。
代码实现:
Scanner sc = new Scanner(System.in);
System.out.println("输入一个小写字符:");
char xx = sc.next().charAt(0);
switch(xx){
case 'a':
System.out.println("A");
break;
case 'b':
System.out.println("B");
break;
case 'c':
System.out.println("C");
break;
case 'd':
System.out.println("D");
break;
case 'e':
System.out.println("E");
break;
default:
System.out.println("other");
break;
}
}
②对学生成绩大于60分的,输出"合格"。低于60分的,输出"不合格"。(注:输入的成绩不能大于100),提示 成绩/60
思路分析 :
1、这道题可以使用分支来完成,但是要求使用switch
2、这里我们需要一个转换:,编程思路:
如果成绩在[60,100],(int)(成绩/60)=1
如果成绩在[0,60),(int)(成绩/60)=0
代码实现 :
Scanner sc = new Scanner(System.in);
System.out.println("输入一个小写字符:");
double score = sc.nextInt();
if(grade<=100){
switch((int)(score/60)){
case 0:
System.out.println("不合格");
break;
case 1:
System.out.println("合格");
break;
}
}else{
System.out.println("错误:成绩要在0-100");
}
}
}
③根据用于指定月份,打印该月份所属的季节。3,4,5春季;6,7,8夏季;9,10,11秋季;12,1,2冬季[提示:使用穿透]
思路分析 :
1、创建Scanner对象,接收用户输入
2、使用int month 接收
3、使用switch来匹配,使用穿透来完成,比较简洁
代码实现 :
Scanner sc = new Scanner(System.in);
System.out.println("输入要查询月份的季节:");
int month = sc.nextInt();
switch(month){
case 3:
case 4:
case 5:
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
break;
case 12:
case 1:
case 2:
System.out.println("冬季");
break;
default:
System.out.println("输出的月份有误");
break;
}
(7)switch 与 if 的比较
1、如果判断的具体数值不多,而且符合byte、short、int、char,enum[枚举],String这6种类型。虽然两个语句都可以使用,建议使用switch语句。
2、其他情况:对区间判断,对结果为Boolean类型判断,使用if,if的使用范围更广