5

I have the following statement to check if a Vector2D is within a box, and IntelliJ gives me a warning: "if statement can be simplified".

if(point.x < minX || point.x > maxX || point.y < minY || point.y > maxY)
    return false;

How can I simplify this?

4

4 回答 4

16

我看不出有任何可能的简化。我会忽略警告。


更新:但是,如果您的方法如下所示:

if(point.x < minX || point.x > maxX || point.y < minY || point.y > maxY)
    return false;
return true;

您可以将其更改为:

return !(point.x < minX || point.x > maxX || point.y < minY || point.y > maxY);

甚至:

return point.x >= minX && point.x <= maxX && point.y >= minY && point.y <= maxY;

我不知道这是否对人类来说是“简化的”。

于 2013-10-17T18:16:57.003 回答
4

每当 IntelliJ 警告可能的简化时,它通常会提供执行简化(通过单击黄色灯泡)。如果你这样做会发生什么?

于 2013-10-17T18:26:08.827 回答
0

尝试将其分成两个 if 语句:一个用于“x”坐标,一个用于“y”。

if(point.x < minX || maxX < point.x)
    return false;
else if(point.y < minY || maxY < point.y)
    return false;
于 2013-10-17T18:26:04.180 回答
0

也许你可以尝试这样的事情:

return new Rectangle(minX, maxX, minY, maxY).contains(point);

就从布尔代数的角度进行简化而言,您一定在寻找 Martin 的答案。事实上,您甚至不需要简化它,因为编译器会自动为您完成。例如,!(a && b)将简化为,!a || !b因为单独检查每个变量比创建临时变量并检查其值更快。

于 2013-10-17T18:26:19.273 回答