为什么我的编译器告诉我:
不兼容的类型:
必填:布尔
找到: Int
案例0&案例1
例如:
public void test(boolean isOn){
switch (isOn){
case 0:
if (isOn){
System.out.println("its on");
}
break;
case 1:
if (!isOn){
System.out.println("its off");
}
break;
default:
System.out.println("I don't know!");
}
}
驱动程序类:
Club me = new Club();
me.test(true);
答案 0 :(得分:15)
您正在启用boolean
类型,而您的案例正在使用int
类型。但即使您将案例更改为boolean
类型,也不会有效。您无法启用boolean
类型。这无济于事,因为使用if-else
会更容易:
if (isOn) {
System.out.println("its on");
} else {
System.out.println("its off");
}
请注意,这里没有"I don't know!"
个案例。 boolean
类型可以包含true
或false
值。这是另一个原因,为什么switch-case
不适用于boolean
类型。没有默认情况。
您还可以使用条件表达式将其压缩为单个语句:
public void test(boolean isOn) {
System.out.println(isOn ? "its on" : "its off");
}
答案 1 :(得分:3)
switch (isOn)
:切换boolean
并想要int
案例,例如case 0
!
根据JLS section 14.11:switch ( Expression ) SwitchBlock
:
表达式只能
char, byte, short, int, Character, Byte, Short, Integer, String, or an enum type
编译时 错误发生。根据规范,以下也必须如此:
- 与switch语句关联的每个case常量表达式 必须可以分配给开关表达式的类型。
- 与交换机关联的
case
个常量表达式中没有两个 声明可能具有相同的价值。- 没有
switch
标签为null
。- 最多一个默认标签可能与同一个开关相关联 声明
醇>
因此,switch表达式不能是float,double或boolean
。要回答问题的原因?:布尔true false
与if-else
一起使用有意义,例如if(true) then do
。浮点数(float
,double
)不适合切换,因为精确比较通常会因舍入错误而中断。例如0.11 - 0.1 == 0.01
是假的。
答案 2 :(得分:2)
在Java中,Switch不支持布尔值。
接受的变量类型是: 炭,字节,短型,整型,字符串,字符,字节,短,整型,枚举
答案 3 :(得分:1)
由于错误明确指出,数字不是布尔值。
您需要true
和false
。
答案 4 :(得分:1)
只需将布尔值转换为数字1和0。
public void test(boolean isOn){
int trueOrFalse;
if(isOn == true){
trueOrFalse = 1;
}else{
trueOrFalse = 0;
}
switch (trueOrFalse){
case 1:
if (isOn){
System.out.println("its on");
}
break;
case 0:
if (!isOn){
System.out.println("its off");
}
break;
default:
System.out.println("I don't know!");
}
}
答案 5 :(得分:1)
在Java中,switch只适用于整数文字,那些可能会被提升为char等整数文字的
此外,在Java布尔类型中,只有两个值true或false。这与C / C ++中的情况不同,在这种情况下,true是任何不等于零的值,而false是零。
此外,您的代码有点多余
答案 6 :(得分:0)
这不是C ++,其中1和0隐式转换为true或false。即使你能做到,开启布尔也是浪费时间;只需编写一个简单的if / else语句,或使用? :
构造。
答案 7 :(得分:0)
¯\ _(ツ)_ /¯
switch (Boolean.hashCode(isOn)) {
case 1231: System.out.println("its on"); break;
case 1237: System.out.println("its off"); break;
}
答案 8 :(得分:0)
您不能在switch语句上使用布尔值。当语句为true或false时,没有必要使用switch。 if-else易于使用。