有人能告诉我为什么三元运算符的使用不正确吗?操作数2和3返回一个布尔值。
public class Something {
...
private static final double REFERENCE_FRAME_MID_X = 0;
private static final double REFERENCE_FRAME_MID_Y = 0;
private boolean findInsideOrOutsideGeneralEllipse(Point2D destCirclePos) {
List<Boolean> returnValue = new ArrayList<>();
Point2D referenceFrameCenter = new Point2D.Double(REFERENCE_FRAME_MID_X, REFERENCE_FRAME_MID_Y);
Ellipse2D insideAreaEllipse2D = getEllipse2D(referenceFrameCenter.getX(), referenceFrameCenter.getY(),
destCirclePos.distance(referenceFrameCenter));
// doesn't work
insideAreaEllipse2D.contains(destCirclePos) ? returnValue.add(true) : returnValue.add(false);
// works
if (insideAreaEllipse2D.contains(destCirclePos)) {
returnValue.add(true);
} else {
returnValue.add(false);
}
}
...
}
答案 0 :(得分:10)
Java三元操作条件的使用应该类似于
result = testCondition ? value1 : value2
它是java语言规范。
Equality, Relational, and Conditional Operators
在以下示例中, 此运算符应理解为:“如果 someCondition true ,请指定 值 value1 的结果。否则,将 value2 的值指定给 结果
答案 1 :(得分:5)
事实上,通过表达式语句的语法(§14.8),条件表达式不允许出现在可能出现void方法调用的任何上下文中。
expression statements from JLS - 14.8的语法:
某些类型的表达式可以通过以分号跟随它们来用作语句:
ExpressionStatement: StatementExpression ; StatementExpression: Assignment PreIncrementExpression PreDecrementExpression PostIncrementExpression PostDecrementExpression MethodInvocation ClassInstanceCreationExpression
通过计算表达式来执行表达式语句;如果表达式具有值,则丢弃该值。当且仅当表达式的评估正常完成时,表达式语句的执行才会正常完成。
与C和C ++不同,Java编程语言只允许某些形式的表达式用作表达式语句。
现在你使用条件运算符的方式不是一个有效的表达式语句,从它的语法推断出来。因此,您会收到编译器错误。您必须在上述任何一种情况下使用它。