用布尔值的switch语句不起作用?

时间:2013-10-13 22:50:58

标签: java boolean switch-statement

为什么我的编译器告诉我:

不兼容的类型:

必填:布尔

找到: 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);

9 个答案:

答案 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类型可以包含truefalse值。这是另一个原因,为什么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.11switch ( Expression ) SwitchBlock

  

表达式只能 char, byte, short, int, Character, Byte, Short, Integer, String, or an enum type 编译时   错误发生。

     

根据规范,以下也必须如此:

     
      
  1. 与switch语句关联的每个case常量表达式   必须可以分配给开关表达式的类型。
  2.   
  3. 与交换机关联的case个常量表达式中没有两个   声明可能具有相同的价值。
  4.   
  5. 没有switch标签为null
  6.   
  7. 最多一个默认标签可能与同一个开关相关联   声明
  8.   

因此,switch表达式不能是float,double或boolean。要回答问题的原因?:布尔true falseif-else一起使用有意义,例如if(true) then do。浮点数(floatdouble)不适合切换,因为精确比较通常会因舍入错误而中断。例如0.11 - 0.1 == 0.01是假的。

答案 2 :(得分:2)

在Java中,Switch不支持布尔值。

接受的变量类型是: 炭,字节,短型,整型,字符串,字符,字节,短,整型,枚举

答案 3 :(得分:1)

由于错误明确指出,数字不是布尔值。

您需要truefalse

答案 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易于使用。