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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 09:54:55