Point2D与Line2D类midpoint方法实现异常求助
问题分析与修正方案
核心问题梳理
Point2D类的问题
- 错误篡改了当前对象的状态:
this.x = x + other.x;和this.y = y + other.y;直接修改了调用该方法的Point2D对象本身的坐标值,这违反了“返回新中点对象”的需求,还会导致原对象数据被污染,影响后续使用。 - 计算逻辑依赖被修改后的属性:虽然数值结果可能暂时看似正确,但原对象被篡改是严重的逻辑错误。
Line2D类的问题
- 未遵守题目约束:没有调用Point2D的midpoint方法,而是自行实现中点计算,不符合“必须调用Point2D的midpoint方法”的要求。
修正后的代码
修正后的Point2D类midpoint方法
public Point2D midpoint(Point2D other) { // 直接基于原坐标计算,不修改当前对象属性 int midX = (this.x + other.x) / 2; int midY = (this.y + other.y) / 2; return new Point2D(midX, midY); }
修正后的Line2D类midpoint方法
假设Line2D类包含endPoint1和endPoint2两个Point2D类型成员变量:
public Point2D midpoint() { // 调用Point2D的midpoint方法获取中点 return endPoint1.midpoint(endPoint2); }
修正说明
- Point2D的midpoint方法现在仅基于原对象和传入对象的坐标计算中点,返回全新的Point2D对象,既保证结果正确,也不会破坏原对象状态。
- Line2D的midpoint方法通过调用endPoint1的midpoint方法并传入endPoint2,完全满足题目中“必须调用Point2D的midpoint方法”的约束,同时正确获取线段中点。
内容的提问来源于stack exchange,提问作者GIsilver12
相关产品推荐
相关产品推荐

