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); } }
代码说明
- 自定义max/min方法:完全避免使用Math类,通过三元运算符实现最大值、最小值的获取。
- 重叠长度计算逻辑:
- x轴:取两个矩形左边界的最大值、右边界的最小值,若右边界最小值大于左边界最大值,两者之差即为x轴重叠长度;否则无重叠。
- y轴:逻辑与x轴一致,取上边界最大值、下边界最小值计算重叠长度。
- 并集面积计算:遵循通用公式
并集面积 = 矩形1面积 + 矩形2面积 - 交集面积,确保结果准确。
测试输入运行后,会输出:
交集面积:25 并集面积:75
完全符合预期结果。
内容的提问来源于stack exchange,提问作者Droidshizonoid
相关产品推荐
相关产品推荐

