【问题标题】:What am I doing wrong with conditional operators? [duplicate]我在使用条件运算符时做错了什么? [复制]
【发布时间】:2010-01-06 00:48:07
【问题描述】:

我有以下代码:

public class boolq {
    public static void main(String[] args) {
        boolean isTrue = true;
        isTrue ? System.out.println("true"): System.out.println("false");       
    }
}

当我尝试编译它时,我得到了这个:

线程“main”java.lang.Error 中的异常:未解决的编译问题:

标记“;”上的语法错误,此标记后应断言

类型不匹配:无法从 void 转换为布尔值

在 boolq.main(boolq.java:3)

我做错了什么?

java-版本

java版本“1.6.0_15”

Java(TM) SE 运行时环境(内部版本 1.6.0_15-b03)

Java HotSpot(TM) 客户端 VM(内部版本 14.1-b02,混合模式,共享)

【问题讨论】:

    标签: java boolean


    【解决方案1】:

    三元运算符是一个表达式,计算结果为您传递给它的两个值之一。

    由于System.out.println 不返回值,所以不能将它放在三元运算符中。

    你需要写System.out.println(isTrue ? "true" : "false");

    【讨论】:

    • 常见错误,是三元运算-en.wikipedia.org/wiki/Ternary_operation
    • @jball:你是对的; tertiary 表示三阶。
    • 这就是语言不应该区分表达式和语句的原因!
    • 常见错误,它是 a 三元运算符,它是 the 条件运算符。它恰好是唯一的三元(三个操作数)运算符。可能有点迂腐,所以请随意忽略我,但了解这些 IMO 是件好事。
    • 我不同意。在有人制作第二个三元运算符之前,它也是 三元运算符。
    【解决方案2】:

    这个语句实际上有两个错误。

    isTrue ? System.out.println("true"): System.out.println("false");
    

    正如@Slaks 指出的那样,三元“?”运算符要求第二个和第三个操作数表达式具有非 void 类型。这解释了消息

    “类型不匹配:无法从 void 转换为布尔值”。

    但是消息

    “标记“;”上的语法错误,此标记后应断言”

    说的是不同的东西!!发生这种情况是因为并非所有表达式都可以用作 Java 中的语句。简而言之,即使您用非空表达式替换了 println 调用,这仍然是一个错误。

    Java 语法的适用部分是这样说的:

    ExpressionStatement:
        StatementExpression ;
    
    StatementExpression:
        Assignment
        PreIncrementExpression
        PreDecrementExpression
        PostIncrementExpression
        PostDecrementExpression
        MethodInvocation
        ClassInstanceCreationExpression
    

    请注意,三元表达式不在列表中。然后解析器(错误地)假设您正在尝试编写 AssertStatement,并说您在行首省略了 assert 关键字。

    【讨论】:

      【解决方案3】:

      好久没用Java了,不过我会用这个语法来解决问题:

      public class boolq {
          public static void main(String[] args) {
              boolean isTrue = true;
              System.out.println(isTrue ? "true" : "false");       
          }
      }
      

      【讨论】:

        【解决方案4】:

        您正在尝试在语句上下文中使用表达式。试试:

        public class boolq { 
            public static void main(String[] args) { 
                boolean isTrue = true; 
                if (isTrue) {
                    System.out.println("true");
                } else {
                    System.out.println("false");
                }
            } 
        }
        

        【讨论】:

          【解决方案5】:

          如果您仍然想使用“short if”,那么试试这个:

          boolean isTrue;     
          PrintStream ps = isTrue ? System.out : System.err;
          ps.println(String.valueOf(isTrue));
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-02-25
            • 2019-05-02
            • 2012-02-29
            • 2020-08-26
            • 1970-01-01
            • 2019-12-21
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多