16

这段代码有什么问题:

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

6 回答 6

37

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

你需要重写它。

void bark(boolean hamlet) {
     System.out.println( hamlet ? "To Bark." : "Not to Bark" );
}
于 2013-06-01T20:01:46.700 回答
9

您可以在 Java 语言规范15.25 中阅读原因。条件运算符 ? :

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

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

于 2013-06-01T20:01:43.997 回答
4

根据§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 方法是编译时错误。

于 2013-06-01T20:04:02.717 回答
1

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

void bark(boolean hamlet) {
    String result = hamlet ? "To Bark!" : "Not to Bark";
    System.out.println(result)
}
于 2013-06-01T20:02:40.580 回答
0

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

void bark(boolean hamlet)
{
  if (hamlet)
  {
    System.out.println("To Bark.")
  }
  else
  {
     System.out.println("Not to Bark");
  }
}
于 2013-06-01T20:02:09.570 回答
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");
}
于 2013-06-01T20:04:24.470 回答