【问题标题】:Why doesn't this method work? Java ternary operator为什么这种方法不起作用? Java 三元运算符
【发布时间】:2013-05-28 10:06:08
【问题描述】:

这段代码有什么问题:

void bark(boolean hamlet) {
    hamlet ? System.out.println("To Bark.") : System.out.println("Not to Bark");
}

【问题讨论】:

  • 当你从 javascript 切换到 Java ;)

标签: java ternary-operator


【解决方案1】:

三元运算符不能有不返回值的语句,void 方法。你需要有返回值的语句。

你需要重写它。

void bark(boolean hamlet) {
     System.out.println( hamlet ? "To Bark." : "Not to Bark" );
}

【讨论】:

    【解决方案2】:

    您可以在 Java 语言规范中了解原因,15.25. Conditional Operator ? :

    第二个或第三个操作数表达式调用 void 方法是编译时错误。

    您需要按照其他几个答案的建议进行操作,并将条件运算符仅应用于参数。

    【讨论】:

      【解决方案3】:

      根据§JLS.15.25

      ConditionalExpression:
      ConditionalOrExpression
      ConditionalOrExpression ? Expression : ConditionalExpression
      

      条件运算符在语法上是右结合的(它分组 右到左)。因此,a?b:c?d:e?f:g 的含义与 a?b:(c?d:(e?f:g))。

      条件运算符具有三个操作数表达式。 ?出现 在第一个和第二个表达式之间,并且 : 出现在 第二个和第三个表达式。

      第一个表达式必须是 boolean 或 Boolean 类型,或者 发生编译时错误。

      这是第二个或第三个操作数的编译时错误 表达式是对 void 方法的调用。

      【讨论】:

      • 感谢这些规范链接。我以前从未看过它们。
      【解决方案4】:

      我应该想象它,因为三元运算符期望分配一个值。试试这个:

      void bark(boolean hamlet) {
          String result = hamlet ? "To Bark!" : "Not to Bark";
          System.out.println(result)
      }
      

      【讨论】:

        【解决方案5】:

        三元语句必须返回一些东西,你可以在这里使用 if:

        void bark(boolean hamlet)
        {
          if (hamlet)
          {
            System.out.println("To Bark.")
          }
          else
          {
             System.out.println("Not to Bark");
          }
        }
        

        【讨论】:

          【解决方案6】:

          三元运算符必须返回一些东西。所以你可以像这样把它放在 print 语句中:

          void bark(boolean hamlet) 
          {
              System.out.printf("%s\n", hamlet ? "To Bark." : "Not to Bark");
          }
          

          或者:

          void bark(boolean hamlet) 
          {
              System.out.println(hamlet ? "To Bark." : "Not to Bark");
          }
          

          【讨论】:

          • 当 Java 标准和 OP 的使用是 println 时,为什么要 printf
          猜你喜欢
          • 2013-04-11
          • 2013-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-13
          • 2019-01-04
          • 2021-06-12
          • 1970-01-01
          相关资源
          最近更新 更多