【问题标题】:Java one line if does not work for prints [duplicate]Java 一行如果不适用于打印 [重复]
【发布时间】:2016-07-10 17:00:51
【问题描述】:

如果你这样写:

    boolean condition;
    (...)
    String out = condition ? "true" : "false";
    System.out.println(out);

它有效。但是如果你写

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

您会收到“非陈述”错误。 “正确”的方式是这样写(大括号的用法或“是否在一行”超出了问题的范围):

    if (condition)
        System.out.println("true");
    else
        System.out.println("false");

为什么?一行ifs 必须总是返回一个值?

编辑:致所有指出这一点的人

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

不是正确的语法,是的,我得到了那部分。我不是在寻求解决方案(尽管

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

很好。

@Andrew Tobilko 这是在哪里说明的? 是我感兴趣的。

EDIT2:接受的答案正是我想要的。谢谢

【问题讨论】:

  • PS:您的问题似乎正在从“为什么它不起作用”变为“为什么 java 不支持我刚刚提出的这个功能”。在我看来,你做了很多编辑。老实说,您的问题不再是问题。

标签: java if-statement


【解决方案1】:

condition ? System.out.println("true") : System.out.println("false"); 不是陈述。

来自here

在计算机科学中,三元运算符是采用三个参数的运算符。

System.out.println("true") 不适合作为参数,因为方法 println() 属于 void 类型。因此,它不是一个声明。

改用这个:

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

【讨论】:

  • 老实说,这是迄今为止最糟糕的答案。 “三个论据”是怎么回事,他的论据数量是对的,不是吗?
  • @bvdb 没有。。正如我所说,System.out.println("true") 不符合作为参数的条件,因为方法 println() 是 void 类型。
【解决方案2】:

您的情况:

System.out.println() 不返回任何值(返回 void)。三元运算符期望它的两部分返回语句。

System.out.println(condition ? "true" : "false");
System.out.println(condition); // it's an equalent to the previous line

规范中的一些理论:

ConditionalExpression:
    ConditionalOrExpression
    ConditionalOrExpression ? Expression : ConditionalExpression
  • 条件运算符在语法上是右关联的(它从右到左分组)。因此,a?b:c?d:e?f:ga?b:(c?d:(e?f:g)) 的含义相同。
  • 条件运算符具有三个操作数表达式。 ? 出现在第一个和第二个表达式之间,: 出现在第二个和第三个表达式之间。
  • 第一个表达式必须是booleanBoolean 类型,否则会出现编译时错误。
  • 第二个或第三个操作数表达式调用 void 方法是一个编译时错误。

更多信息是here

【讨论】:

    【解决方案3】:

    三元运算符应该用作:

    field = condition ? valueIfTrue : valueIfFalse;
    

    是的,2 个可能的选项,每个选项都需要有一个值(如果您调用 void 方法,例如 System.out.println(...),则情况并非如此)。

    在你的情况下,你可以写:

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

    【讨论】:

      【解决方案4】:

      这是不正确的语法(你的代码):

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

      这实现了类似的目标,但语法正确

      System.out.println(Condition ? "true"  :  "false")
      

      System.out.println() 不是参数。那只是为了打印。要实际打印,您需要有一个实际的字符串! "example" 。并且不要忘记三元运算符需要三个参数。您评估的条件,如果返回 true,则返回第一个结果,如果返回 false。希望这有帮助!

      语法:

      ConditionToBeEvaluated ? IfTrue : IfFalse
      

      【讨论】:

        猜你喜欢
        • 2020-01-20
        • 1970-01-01
        • 1970-01-01
        • 2019-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多