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

9 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!");
    }
Run Code Online (Sandbox Code Playgroud)

}

驾驶员类:

Club me = new Club();
me.test(true);
Run Code Online (Sandbox Code Playgroud)

Roh*_*ain 15

您正在切换boolean类型,并且您的案例正在使用int类型.但即使您将案例更改为具有boolean类型,这也行不通.你无法打开boolean类型.这没有任何意义,因为使用a if-else会更容易:

if (isOn) {
    System.out.println("its on");
} else {
    System.out.println("its off");
}
Run Code Online (Sandbox Code Playgroud)

请注意,这里没有任何"I don't know!"案例.甲boolean类型可以有truefalse值.这是另一个原因,为什么switch-case不是boolean类型.没有默认情况.

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

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

  • 打开`true`实际上更有用,让你看起来.Go一直使用它https://code.google.com/p/go-wiki/wiki/Switch#Missing_expression (4认同)

Zhe*_*lov 8

\xc2\xaf\\ (\xe3\x83\x84) /\xc2\xaf

\n
switch (Boolean.hashCode(isOn)) {\n    case 1231 -> System.out.println("its on");\n    case 1237 -> System.out.println("its off");\n}\n
Run Code Online (Sandbox Code Playgroud)\n

  • 聚会有点晚了,但让我笑了:D (4认同)

小智 5

只需将布尔值转换为 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!");
    }
}
Run Code Online (Sandbox Code Playgroud)


SLa*_*aks 2

正如错误明确指出的那样,数字不是布尔值。

你想要truefalse