Java一行如果不适用于打印
如果你写的东西如下:
boolean condition; (...) String out = condition ? "true" : "false"; System.out.println(out);
有用。 但如果你写
condition ? System.out.println("true") : System.out.println("false");
你得到一个“非声明”的错误。 “正确”的方式是写(使用大括号或“成为或不成一行”超出了问题的范围):
if (condition) System.out.println("true"); else System.out.println("false");
为什么? if
s必须总是返回一行值?
编辑:大家指出这一点
condition ? System.out.println("true") : System.out.println("false");
是不是一个正确的语法,是的,我得到了那一部分。 我不是要求解决方案(尽管如此)
System.out.println(condition ? "true" : "false");
很好。
@Andrew Tobilko在哪里说明了什么? 这就是我感兴趣的东西。
编辑2 :接受的答案提供了我想要的。 谢谢
condition ? System.out.println("true") : System.out.println("false");
不是声明。
从这里 :
在计算机科学中,三元运算符是一个带有三个参数的运算符。
System.out.println("true")
不符合参数,因为println()
方法属于void类型。 因此,它不是一个声明。
改为使用它:
System.out.println(condition ? "true" : "false");
你的情况:
System.out.println()
不返回任何值(返回void
)。 三元运算符期望它的两部分返回语句。
System.out.println(condition ? "true" : "false"); System.out.println(condition); // it's an equalent to the previous line
规范中的一些理论:
ConditionalExpression: ConditionalOrExpression ConditionalOrExpression ? Expression : ConditionalExpression
- 条件运算符在语法上是右关联的(它从右到左分组)。 因此,
a?b:c?d:e?f:g
表示与a?b:(c?d:(e?f:g))
相同a?b:(c?d:(e?f:g))
。 - 条件运算符有三个操作数表达式。
?
出现在第一个和第二个表达式之间,并且:
出现在第二个和第三个表达式之间。 - 第一个表达式必须是
boolean
或Boolean
类型,否则会发生编译时错误。 - 第二个或第三个操作数表达式是
void
方法的调用是编译时错误。
更多信息在这里 。
三元运算符应该用作:
field = condition ? valueIfTrue : valueIfFalse;
是的,两个可能的选项,每个都需要有一个值(如果你调用一个void
方法,如System.out.println(...)
则不是这种情况)。
在你的情况下你可以写:
System.out.println(condition? "true" : "false");
这是不正确的语法(您的代码):
condition ? System.out.println("true") : System.out.println("false");
这符合类似的目标,但具有正确的语法
System.out.println(Condition ? "true" : "false")
System.out.println()不是一个参数..这只是为了打印。 要实际打印,您需要有一个实际的字符串! "example"
。 并且不要忘记三元运算符需要三个参数。你的评估条件,第一个结果如果返回true,如果返回false。希望这有帮助!
句法:
ConditionToBeEvaluated ? IfTrue : IfFalse