Java新⼿问题swich语句中出现的问题⼆元运算符“”操作数类型错误
案例:春夏秋冬
需求:
⼀年有⼗⼆个⽉,分属于春夏秋冬四个季节,键盘录⼊⼀个⽉份
请⽤程序判断这个⽉分属于什么季节?
春:3,4,5
夏:6,7,8
秋:9,10,11
冬:1,2,12
在学习过switch语句的基本⽤法后,我们可以轻易的写出基础的代码,如下:
switch(i){
case3:
System.out.println("春");
break;
case4:
System.out.println("春");
break;
case5:
System.out.println("春");
break;
case6:
System.out.println("夏");
break;
case7:
System.out.println("夏");
break;
case8:
System.out.println("夏");
break;
case9:
System.out.println("秋");
break;
case10:
System.out.println("秋");
break;
case11:
System.out.println("秋");
break;
case12:
System.out.println("冬");
break;
case1:
System.out.println("冬");
break;
case2:
System.out.println("冬");
break;
default:
System.out.println("您输⼊的⽉份有误");
}
但是这样写实在是太过繁琐,因此我就想到能否⽤更简单的⽅式呢?于是,我开始了改造代码的第⼀步:
·既然我们要判断春夏秋冬,只需要判断我们输⼊的数字i是否属于各个季节三个⽉份之⼀,于是我想到之前学过的⼆元运算符“||”。于是,代码被我改成了这个样⼦:
case(3||4||5):
System.out.println("春");
break;
case(6||7||8):
System.out.println("夏");
break;
case(9||10||11):
System.out.println("秋");
break;
case(12||1||2):
System.out.println("冬");
break;
default:
System.out.println("您输⼊的⽉份有误");
}
看起来完美,没有错误,是不是?但是让我们编译⼀下,出现了下⾯的问题
⼆元运算符 ‘||’ 的操作数类型错误?哪⾥错了呢?回想⼀下之前的代码,我们在使⽤⼆元运算符“||”时,连接的都是⼀个表达式,于是我们把代码改成这个样⼦试⼀试呢?
switch(i){
case(i ==3|| i ==4||i ==5):
System.out.println("春");
break;
...
编译运⾏后,我们发现它⼜出现了错误,如下:
不兼容的类型:boolean⽆法转换为int。于是我们⼜想到⼆元运算符“||”运算过后,我们得到的是⼀个布尔类型的值,⽽我们switch()中与之对⽐的值i是int型,因此⽆法⽐较。那如果我们将switch()中的值也改为布尔类型呢?如下
switch(true){
case(i ==3|| i ==4||i ==5):
System.out.println("春");
break;
编译运⾏后,我们发现依旧是出现了错误,如下:
还是不可以,究竟是哪⾥错了呢?我们翻看⼀下switch语句的格式及其说明:
switch语句
switch(表达式){
case 值1:
语句体1;
break;
java switch case stringcase 值2
语句体2;
break;
...
default:
语句体n+1;
[break];//可选
格式说明:
·表达式:取值为byte\short\int\char,JDK5以后可以是枚举,JDK7以后可以是String
·case:后⾯跟的值是要跟表达式⽐较的值
·break:表⽰中断、结束的意思,⽤来结束switch的语句
·default:表⽰所有情况都不匹配的时候,就执⾏该处的内容,和if语句的else相似
我们发现switch()中的表达式取值不可为布尔类型,因此我们从最开始的思路导致了后⾯问题的出现。
那么,我们该如何才能简化这段switch代码呢?
我们⽤到了switch语句中的case穿透,代码如下:
//case穿透
switch(i){
case3:
case4:
case5:
System.out.println("春");
break;
case6:
case7:
case8:
System.out.println("夏");
break;
case9:
case10:
case11:
System.out.println("秋");
break;
case12:
case1:
case2:
System.out.println("冬");
break;
default:
System.out.println("您输⼊的⽉份有误");
}
什么是case穿透呢?
·在switch语句中,如果case控制的语句体后⾯不写break,将出现穿透现象,在不判断下⼀个case值的情况下,向下运⾏,直到遇到break,或者整体switch语句结束。
综上,我们完成了switch练习案例:春夏秋冬的代码编写,并解决了我们在过程中出现的 ⼆元运算符“||”操作数类型错误 问题。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。