为什么';这种方法行得通吗?Java三元运算符

为什么';这种方法行得通吗?Java三元运算符,java,ternary-operator,Java,Ternary Operator,此代码有什么问题: void bark(boolean hamlet) { hamlet ? System.out.println("To Bark.") : System.out.println("Not to Bark"); } 您可以在Java语言规范中了解为什么 第二个或第三个操作数表达式调用void方法是编译时错误 您需要按照其他几个答案的建议执行操作,并将条件运算符仅应用于参数。三元运算符不能包含不返回值的语句,void方法。您需要具有返回值的语句 你需要重写它 void

此代码有什么问题:

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

您可以在Java语言规范中了解为什么

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


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

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

你需要重写它

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

三元语句必须返回某些内容,您可以在此处使用if:

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

我可以想象这是因为三元运算符期望赋值。试试这个:

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

条件运算符在语法上是右关联的(it) 从右到左)。因此,a?b:c?d:e?f:g的意思与 a?b:(c?d:(e?f:g))

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

第一个表达式的类型必须为boolean或boolean,或 发生编译时错误

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


三元运算符必须返回某些内容。因此,您可以将其放入print语句中,如下所示:

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


感谢您提供这些规格的链接。我以前从未看过它们。当Java标准和OP的使用是
println
时,为什么
printf
?当您从javascript切换到Java;)
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");
}