3.5 switch语句
如果要根据一个值(数字或者字符)来判定应该执行哪条分支,不需要判断什么条件,这个时候,用switch语句更合适。switch语法如下:
switch(表达式){
case a:…;
break;
case b:…;
break;
/*
其他代码
*/
default:…;
}
(1)switch需要大括号,不能省略;
(2)switch里面不是条件,是表达式,可以计算出值,这里只接受算术表达式、字符表达式或字符串;
(3)case后的常量(a、b)的类型和表达式的类型一致,这里执行多条语句不需要大括号;
(4)不允许两个case有相同的值;
(5)在case后面紧接着的是冒号,如果冒号后面没有任何语句,那么就执行紧接着的下一个case语句,直到遇到break;如果要形成多路逻辑,那么每个case语句最后都要写上break。
如果不写会怎样呢?我们用代码来说明,下面代码中,如果a是4,那么执行完case 4的语句后,就执行case 5;执行完case 5的语句后,就执行case 6,到这里打印出a,遇到了break,整个switch结束。没有break的case语句执行完,会继续执行下一条case,直到遇到break或者结束,不管后面的case有没有命中!
switch(a){
case 4:语句;
case 5:语句;
case 6:System.out.println(a);
break;
}
(6)default是缺省,如果没有任何一个case命中,那么就直接执行default里面的代码。default不是必须的,可以没有。
下面来看一个具体的例子,运行一下看看什么效果:
public static void main(String[]args){ System.out.println("请输入一个0到6的整数。"); int a=new java.util.Scanner(System.in).nextInt(); switch(a){ case 0:System.out.println("Sunday"); break; case 1:System.out.println("Monday"); break; case 2:System.out.println("Tuesday"); break; case 3:System.out.println("Wednesday"); break; case 4:System.out.println("Thursday"); break; case 5:System.out.println("Friday"); break; case 6:System.out.println("Saturday"); break; default:System.out.println("wrong number!"); }}练习题
-
根据上面的switch规范进行选择,以下题目的a是整数类型1.下列说法正确的是 (2分) [选择]A.
B. switch必定是要大括号
C. 缺乏default语句
D. case后的常量的类型,没有和switch的表达式类型一致
E. 语法正确switch(a)case 5:System.out.println(a);break;case 6:System.out.println(a);2.下列说法正确的是 (2分) [选择]A.
B. 不允许两个case有相同的值
C. 缺乏default语句
D. case后的常量的类型,没有和switch的表达式类型一致
E. 语法正确switch(a){ case 5:System.out.println(a); case 5:System.out.println(a);}3.下列说法正确的是 (2分) [选择]A.
B. case不允许跳过前面的项目,case 4那些也需要
C. switch里面应该是条件
D. case 5和default后缺乏大括号
E. 语法正确
switch(a){ case 5:System.out.println(a); break; default:System.out.println("无匹配");}4.下列说法正确的是 (2分) [选择]A.
B. case冒号后缺乏大括号
C. case没有写break
D. case是一个布尔表达式,和a的类型不匹配
E. 语法正确
switch(a){ case a<5:System.out.println("小于5"); case a >= 5:System.out.println("大于5"); default:System.out.println("无匹配");}5.下列说法正确的是 (2分) [选择]A.
B. case冒号后缺乏大括号
C. case 4和case 6里不能使用了"4"和"6",应该用4和6
D. case 6后面没有break
E. 语法正确
switch(a){ case 4:System.out.println("4"); break; case 6:System.out.println("6"); default:System.out.println("无匹配");}6.下列说法正确的是 (2分) [选择]A.
B. 不允许两个case有相同的语句
C. default最后缺乏break
D. case后的常量的类型,没有和switch的表达式类型一致
E. 语法正确
switch(a){ case "4":System.out.println("4"); break; case "5":System.out.println("4"); break; default:System.out.println("无匹配");}7.下列说法正确的是 (2分) [选择]A.
B. 不允许两个case有相同的值
C. switch不允许用表达式
D. default最后没有使用break
E. 语法正确
switch(a+2){ case 6:System.out.println("6"); break; case 7:System.out.println("7"); break; case 8:System.out.println("8"); break; default:System.out.println("无匹配");} -
阅读1.switch的局限性 [阅读]switch可以用来做分支结构,但仅限于单个值的对比,如果用它来完成成绩分级,那么就会显得“笨拙”。阅读下面的代码,注意它利用了命中case后逐次往下执行直到遇到break的特性
public static void main(String[]agers){ int score=new Scanner(System.in).nextInt(); switch(score){ case 100:; case 99:; case 98:; case 97:; case 96:; case 95:; case 94:; case 93:; case 92:; case 91:; case 90:System.out.println("优"); break; case 89:; case 88:; case 87:; case 86:; case 85:; case 84:; case 83:; case 82:; case 81:; case 80:System.out.println("良"); break; case 79:; case 78:; case 77:; case 76:; case 75:; case 74:; case 73:; case 72:; case 71:; case 70:System.out.println("中"); break; case 69:; case 68:; case 67:; case 66:; case 65:; case 64:; case 63:; case 62:; case 61:; case 60:System.out.println("及格"); break; default:if(score > 30) System.out.println("不及格"); else System.out.println("差"); }}2.swtich用字符串作为分支依据 [阅读]java 1.8后支持使用字符串作为判断依据了,之前的版本只支持整数和字符。下面是一个简单的例子public static void main(String[]agers){ /* 输入一个字符串到str */ String str=new Scanner(System.in).next(); switch(str){ case "赵":System.out.println("赵先生"); break; case "john":System.out.println("外国人"); break; case "good":System.out.println("打招呼"); break; }} -
用switch语句完成下面的编程题目1.打印星期几 (10分) [编程]从键盘输入一个数字,赋给整型变量day,输入0到6几个数字的时候,就打印星期几,0对于“星期天”,1对应“星期一”,2对应“星期二”,以此类推。如果超出这个范围,打印“非法数字”。2.编程实现下面的游戏选择模拟 [编程(无自动批改)]首先给出选项,选择职业(战士、法师、猎人);然后选择性别(男、女)、最后选择种族(人类、精灵、矮人)。最后根据用户的输入,打印出用户的选择,适当组织语言。提示:先把输入,然后再写switch,同时打印的时候不要转行。3.根据输入判断性别 (10分) [编程]从键盘输入一个字符c,如果是‘f’,那么打印“女性”;如果是‘m’打印“男性”;如果是‘u’打印“未确定”;如果是别的字符,打印“非法字符”。4.输出成绩范围 (10分) [编程]从键盘输入一个字符c,如果是’A’,那么输出“85-100”;如果是’B’, 那么输出“70-84”;如果是’C’, 那么输出“60-69”; 如果是’D’, 那么输出“<60”;如果是其他,输出“错误”。