You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java新手求助:修改两矩形并集面积计算代码以正确输出结果

解决矩形并集面积计算问题(无Math类依赖)

你的代码存在两个核心问题:

  • 重叠长度计算逻辑不完整:仅处理了矩形部分重叠的场景,遗漏了边缘重合、一个矩形完全包含另一个的情况,导致测试输入中x1=x2、y1=y2时,重叠长度被错误计算为0。
  • 最终结果计算错误:overLapArea = Area - w1 * x2是无意义的错误操作,Area本身已经是并集面积的正确计算结果(两矩形面积和减去交集面积)。

修正后的代码

public class RectangleAreaCalculator {
    // 自定义取最大值方法,替代Math.max
    private static int max(int a, int b) {
        return a > b ? a : b;
    }

    // 自定义取最小值方法,替代Math.min
    private static int min(int a, int b) {
        return a < b ? a : b;
    }

    public static int calculateUnionArea(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2) {
        // 计算x轴重叠长度
        int leftMax = max(x1, x2);
        int rightMin = min(x1 + w1, x2 + w2);
        int overlapX = rightMin > leftMax ? rightMin - leftMax : 0;

        // 计算y轴重叠长度
        int topMax = max(y1, y2);
        int bottomMin = min(y1 + h1, y2 + h2);
        int overlapY = bottomMin > topMax ? bottomMin - topMax : 0;

        // 交集面积
        int overlapArea = overlapX * overlapY;
        // 并集面积:两矩形面积和减去交集面积
        int unionArea = w1 * h1 + w2 * h2 - overlapArea;

        // 按需输出交集和并集面积
        System.out.println("交集面积:" + overlapArea);
        System.out.println("并集面积:" + unionArea);

        return unionArea;
    }

    public static void main(String[] args) {
        // 测试输入:0 0 5 10 0 0 10 5
        calculateUnionArea(0, 0, 5, 10, 0, 0, 10, 5);
    }
}

代码说明

  1. 自定义max/min方法:完全避免使用Math类,通过三元运算符实现最大值、最小值的获取。
  2. 重叠长度计算逻辑:
    • x轴:取两个矩形左边界的最大值、右边界的最小值,若右边界最小值大于左边界最大值,两者之差即为x轴重叠长度;否则无重叠。
    • y轴:逻辑与x轴一致,取上边界最大值、下边界最小值计算重叠长度。
  3. 并集面积计算:遵循通用公式并集面积 = 矩形1面积 + 矩形2面积 - 交集面积,确保结果准确。

测试输入运行后,会输出:

交集面积:25
并集面积:75

完全符合预期结果。

内容的提问来源于stack exchange,提问作者Droidshizonoid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 14:45:01