为什么这种方法不起作用? Java三元运算符

时间:2013-06-01 19:59:11

标签: java ternary-operator

此代码出了什么问题:

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

6 个答案:

答案 0 :(得分:31)

三元运算符不能包含不返回值void方法的语句。您需要具有返回值的语句。

你需要重写它。

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

答案 1 :(得分:9)

您可以在Java语言规范中阅读原因15.25. Conditional Operator ? :

  

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

您需要像其他几个答案所建议的那样做,并将条件运算符应用于参数。

答案 2 :(得分:4)

根据§JLS.15.25

ConditionalExpression:
ConditionalOrExpression
ConditionalOrExpression ? Expression : ConditionalExpression
  

条件运算符在语法上是右关联的(它是组合的   右到左)。因此,a?b:c?d:e?f:g表示与...相同   A B:(2 C d:(E F:G))。

     

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

     

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

     

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

三元运营商必须退货。所以你可以将它放在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");
}