公共类外的公共方法实现:寻找距(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
相关产品推荐
相关产品推荐

