switch语句
-
switch语句也属于选择结构,也是分支语句
-
switch语句的语法结构:
一个比较完整的switch语句应该这样编写:
public class SwitchText01 { public static void main(String[] args){ switch(int或String类型的字面值或变量){ case int或String类型的字面值或变量: java语句; ... break; case int或String类型的字面值或变量: java语句; ... break; case int或String类型的字面值或变量: java语句; ... break; case int或String类型的字面值或变量: java语句; ... break; ... default : java语句; ... } } }
-
switch语句的执行原理
switch后面的小括号中的“数据”与case后面的“数据"进行一一匹配,匹配成功的分支执行
按照自上而下的顺序依次匹配。
-
匹配成功的分支执行,分支中最后有”break;“语句的话,整个switch语句终止
-
匹配成功的分支执行,分支中没有”break;“语句的话,直接进入下一个分支执行(不进行匹配)
这种现象被称为:**”case穿透“**现象。【提供"break;"语句可以避免穿透】
-
所有分支都没有匹配成功,当有”default:“语句的话,会执行default分支中的程序
-
switch后面和case后面只能是int或者String类型的数据,不能是探测其他类型。
- 当然byte,short,char也可以直接写到switch和case后面,因为它们可以进行自动类型转换。
- byte、short、char可以自动转换成int类型
/* long a= 10L; int b= a;//编译报错,应该加强制类型转换符 */ /* long x=100L; switch(x){} //编译报错,long类型无法自动转换为int类型 */ //解决编译错误 long x=100L; switch((int)x){} byte b= 10; switch(b){} short s= 10; switch(s){} char c= 'A'; switch(c){} char cc= 97; switch(cc){} //编译报错 类型不兼容 //switch(true){} String username="lisi"; switch(username){}
-
case可以合并
int i= 10; switch(i){ case 1: case 2: case 3: case 10://i=1或2或3或10,以下语句都会执行 System.out.println("Text Code"); }
-
教完整的switch语句,csae穿透、合并实例
/* 较完整的switch语句 需求: 接收用户输入: 1表示星期一 2表示星期二 。。。 7表示星期日 */ public class SwitchText01 { public static void main(String[] args){ java.util.Scanner s=new java.util.Scanner(System.in); System.out.print("请输入数字:"); int num=s.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("您输入的数字有误,请重新输入"); } System.out.println("------------------------------------------------"); //case穿透 // 如果某句case后面没跟break语句,那么满足这个条件后,会一直执行到碰见break或者switch语句结束 //只有当满足某个条件时,才会从这个条件开始一直执行下去 switch(num){ 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("您输入的数字有误,请重新输入"); } System.out.println("------------------------------------------------"); //case合并 switch(num){ case 1: case 0: 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("您输入的数字有误,请重新输入"); } } }
-
String类型
public class SwitchText02 { public static void main(String[] args){ java.util.Scanner s=new java.util.Scanner(System.in); System.out.print("今天是星期几:"); String dayOfWeek=s.next(); switch(dayOfWeek){ case "星期一": System.out.println("1"); break; case "星期二": System.out.println("2"); break; case "星期日": System.out.println("7"); break; default : System.out.println("您输入的数据有误"); } } }
-
char的switch语句
public class SwitchText02 { public static void main(String[] args){ // char c= 'A'; //高级 // char c= 'B'; //中级 // char c= 'C'; //低级 // char c= 65; //高级 // char c= 'D'; //出错了 char c= 66;//中级 switch(c){ case 'A' : System.out.println("高级"); break; case 'B' : System.out.println("中级"); break; case 'C' : System.out.println("低级"); break; default : System.out.println("出错了"); } //char的另一种显示方式 c=67;//低级 switch(c){ case 'A' : System.out.println("高级"); break; case 'B' : System.out.println("中级"); break; case 'C' : System.out.println("低级"); break; default : System.out.println("出错了"); } } }
-
需求:用switch写一个简单计算器
public class SwitchText03 { public static void main(String[] args){ java.util.Scanner s=new java.util.Scanner(System.in); System.out.println("欢迎使用简单计算器计算系统"); System.out.print("请输入第一个数字:"); int num1= s.nextInt(); System.out.print("请输入想要进行的运算符号:"); String symbol=s.next(); System.out.print("请输入第二个数字:"); int num2= s.nextInt(); int result=0;//因为要接收用户键盘输入,但编译只检查语法,以下输出语句有用到result,所以要给它一个值 switch(symbol){ case "+" : result=num1+num2; break; case "-" : result=num1-num2; break; case "*" : result=num1*num2; break; case "/" : result=num1/num2; break; case "%" : result=num1%num2; break; } System.out.println("运算结果:"+num1+symbol+num2+"="+result); } }
-
需求:
假设系统给定;一个考生的成绩,成绩可能带有小数点,学生成绩范围在[0-100]
根据学生的成绩判断该学生的成绩等级,成绩可能带有小数
[90-100]A
[80-90) B
[70-80) C
[60-70) D
[0-60) E以上的逻辑判断采用switch语句完成,不考虑[0,100]以外的
public class SwitchText04 { public static void main(String[] args){ java.util.Scanner s=new java.util.Scanner(System.in); System.out.print("请输入考生成绩:"); double grade=s.nextDouble(); switch((int)(grade/10)) { case 9 : case 10 : System.out.println("该考生的成绩等级为A"); break; case 8 : System.out.println("该考生的成绩等级为B"); break; case 7 : System.out.println("该考生的成绩等级为C"); break; case 6 : System.out.println("该考生的成绩等级为D"); break; default : System.out.println("该考生的成绩等级为E"); } } }