带有布尔值的开关语句不起作用?

2022-09-03 09:30:01

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

不兼容的类型:

必需:布尔值

已找到:整型

在案例 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);

答案 1

您正在打开类型,并且您的情况正在使用类型。但是,即使您将案例更改为具有类型,那也不起作用。您无法打开类型。这没有任何意义,因为无论如何使用会更容易:booleanintbooleanbooleanif-else

if (isOn) {
    System.out.println("its on");
} else {
    System.out.println("its off");
}

请注意,此处没有案例。类型可以具有任一值或值。这是另一个原因,为什么不是为了类型。没有默认情况。"I don't know!"booleantruefalseswitch-caseboolean

您还可以使用条件表达式将其压缩为单个语句:

public void test(boolean isOn) {
    System.out.println(isOn ? "its on" : "its off");
}

答案 2

只需将布尔值转换为数字 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!");
    }
}