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

这段代码出了什么问题:

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

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

你需要重写它。

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

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

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

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

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

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

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

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

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

三元运营商必须返回一些东西。 所以你可以将它放在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"); }