【问题标题】:Java: if statement can be simplified (box contains point)Java:可以简化 if 语句(框包含点)
【发布时间】:2013-10-17 18:15:28
【问题描述】:

我有以下语句来检查 Vector2D 是否在一个框内,并且 IntelliJ 给了我一个警告:“如果语句可以简化”。

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

如何简化?

【问题讨论】:

    标签: java if-statement compiler-warnings simplify


    【解决方案1】:

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


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

    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;
    

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

    【讨论】:

    • 确实如此。我正在寻找 if 子句中的简化。这就是为什么我找不到它。我同意了你的最后一个建议;这对我来说更有意义。
    【解决方案2】:

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

    【讨论】:

    • 我的版本没有灯泡,但有一个可点击的工具提示。谢谢!
    【解决方案3】:

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

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

    【讨论】:

    • 这不等同于 OP 的要求。
    【解决方案4】:

    也许你可以试试这样的:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-13
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      相关资源
      最近更新 更多