当前位置: 首页 > 知识库问答 >
问题:

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

何玺
2023-03-14

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

不兼容类型:

必需:布尔值

找到:Int

在案例0下

例如:

    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);

共有3个答案

慕容玉堂
2023-03-14

切换(isOn):切换布尔值并希望用int进行大小写,例如,case 0

根据JLS第14.11节:对于开关(表达式)开关块

表达式只能是char、byte、短期、int、Character、Byte、短期、整数、字符串或枚举类型,否则会发生编译时错误。

根据规范,以下内容也必须正确:

  1. 与switch语句关联的每个case常量表达式都必须可分配给switch表达式的类型
  2. 与switch语句关联的case常量表达式中的任何两个都不能具有相同的值
  3. 开关标签为
  4. 最多一个默认标签可以与同一个switch语句关联

因此,开关表达式不能是float、double或布尔值。要回答为什么的问题:布尔值true-falseif-else一起使用是有意义的,例如if(true)then do。浮点数(floatdouble)对于开关来说不是一个好的选择,因为精确比较常常被舍入错误破坏。e、 g.0.11-0.1==0.01为假。

沈伟
2023-03-14

只需将布尔值转换为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!");
    }
}
单于庆
2023-03-14

您正在打开booleantype,您的案例正在使用int类型。但是,即使您将案例更改为具有boolean类型,这也行不通。您不能打开布尔类型。这没有任何意义,因为使用if-else无论如何都会更容易:

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

请注意,没有“我不知道!” 案例在这里。boolean类型可以具有truefalse值。这是另一个原因,switch case不适用于boolean类型。没有默认情况。

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

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

 类似资料:
  • 今天我得到了一个关于代码的评论,考虑到我在学校作业中检查变量是真还是假的方式。 我编写的代码如下所示: 他们说这样写更好/更整洁: 例如,0和1不应该在该变量中。

  • 是否可以编写如下JPQL查询: <代码>选择计数(*) 这将根据实体填充条件是否存在返回真/假布尔值? 我想这样使用查询: 我示例中的查询在语法上不正确(解析错误),但是是否有任何正确的方法可以像在JPQL中那样进行检查,从而返回布尔值,或者只有在Java代码中才有可能?

  • 如何在SQL Select语句上返回布尔值? 我尝试了以下代码: 并且它只返回如果存在于表中。如果表中不存在UserID,我希望它返回。

  • 我有一个问题,比较布尔值的if语句不起作用。最后一个if语句,其中notifFlag==true,如果我将它放在那里,它就不起作用了。日志显示notifFlag设置为true,但if语句未运行。但是,如果删除notifFlag==true,则if语句将运行。 带有标志得日志: 没有标志得日志:

  • 在短 我想在thymeleaf中有一个switch语句,逻辑一旦写入多个case语句。 详细地 我想在thymeleaf中实现这一点 我当前的胸腺叶代码失败并出现运行时错误 但是上面的代码错误地失败了 注意:我知道出现上述错误消息的原因。我所需要的只是知道一种方法来实现单输出的多情况切换

  • 问题内容: 我正在尝试编写一个从数据库获取表信息的查询,准备将其放入c#,稍后再导出为XML。我需要使用布尔值将其中一列命名为“IDENT”(以表示它是否是身份列)。 为此,我正在检查AUTOINC_SEED列是否为空,如下所示: 但是,对于非身份列将返回TRUE,对于身份列将返回FALSE!有什么办法可以反转select语句中的布尔值? 编辑:我知道我可以做一个case语句来解决这个特定的问题,