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");
}
}
}