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

公共类外的公共方法实现:寻找距(24,5)最近的PointXY点

别担心,我来帮你理清这个问题!你遇到的核心问题是如何正确操作PointXY类型的ArrayList,以及如何计算到目标点(24,5)的最近点。我们一步步来解决:

第一步:完善你的PointXY类

你的原始类只有私有变量,但外部需要获取x和y的值来计算距离,所以必须添加构造方法和getter方法,还可以加个toString方便调试:

public class PointXY {
    private int x;
    private int y;

    // 构造方法:用来创建PointXY实例
    public PointXY(int x, int y) {
        this.x = x;
        this.y = y;
    }

    // Getter方法:外部获取私有变量的唯一途径
    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

    // 可选:方便打印点的信息,调试用
    @Override
    public String toString() {
        return "PointXY{" + "x=" + x + ", y=" + y + '}';
    }
}
第二步:编写closest_24_5方法

这个方法需要接收ArrayList<PointXY>作为参数,遍历所有点,计算每个点到(24,5)的平方距离(不用开平方,因为比较大小结果一样,还能避免浮点运算误差),然后记录距离最小的点。

import java.util.ArrayList;

public class PointUtils { // 可以把方法放在一个工具类里,或者其他合适的类中

    public static PointXY closest_24_5(ArrayList<PointXY> points) {
        // 边界情况:如果传入的列表为空/Null,返回null(也可以选择抛出异常)
        if (points == null || points.isEmpty()) {
            return null;
        }

        // 初始化最近点为列表第一个元素
        PointXY closestPoint = points.get(0);
        // 计算第一个点到(24,5)的平方距离
        int minDistanceSquared = calculateDistanceSquared(closestPoint);

        // 遍历列表中剩余的每个点
        for (PointXY currentPoint : points) {
            int currentDistanceSquared = calculateDistanceSquared(currentPoint);
            // 如果当前点距离更小,更新最近点和最小距离
            if (currentDistanceSquared < minDistanceSquared) {
                minDistanceSquared = currentDistanceSquared;
                closestPoint = currentPoint;
            }
        }

        return closestPoint;
    }

    // 辅助方法:计算点到(24,5)的平方距离
    private static int calculateDistanceSquared(PointXY point) {
        int xDiff = point.getX() - 24;
        int yDiff = point.getY() - 5;
        return xDiff * xDiff + yDiff * yDiff;
    }
}
第三步:如何使用这个方法

举个例子,展示怎么创建PointXY列表、调用方法并输出结果:

public class Main {
    public static void main(String[] args) {
        ArrayList<PointXY> pointList = new ArrayList<>();
        pointList.add(new PointXY(20, 3));
        pointList.add(new PointXY(25, 6));
        pointList.add(new PointXY(18, 10));

        PointXY closest = PointUtils.closest_24_5(pointList);
        System.out.println("距离(24,5)最近的点是:" + closest);
    }
}
关键知识点解释
  • 为什么用平方距离:计算实际距离需要开平方(Math.sqrt()),但比较两个点的远近时,平方距离的大小关系和实际距离完全一致,这样可以避免浮点运算的性能损耗和精度问题。
  • 如何操作ArrayList<PointXY>:用增强for循环(for (PointXY p : points))可以方便遍历每个元素,调用getX()和getY()就能获取坐标值。
  • 边界处理:一定要检查列表是否为空,避免调用points.get(0)时抛出IndexOutOfBoundsException。

这样应该就能解决你对PointXY类型ArrayList的困惑啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:27:07