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

Java中坐标读取、欧氏距离计算及最近点对求解技术咨询

嘿,作为Java新手,这个任务拆解开来其实挺容易上手的,我给你整理了详细的实现思路和代码示例,跟着走就行啦:

完整实现步骤与代码示例

1. 定义坐标存储类

首先咱们可以自定义一个简单的Point类来存储x和y坐标,这样后续操作起来更清晰:

class Point {
    private double x;
    private double y;

    public Point(double x, double y) {
        this.x = x;
        this.y = y;
    }

    // 提供getter方法,方便获取坐标值
    public double getX() {
        return x;
    }

    public double getY() {
        return y;
    }
}

2. 读取坐标并存储

用Scanner来读取控制台输入,每行一个坐标(格式比如3 5),直到输入单独的-1时终止。把读取到的坐标都存入List<Point>中:

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class ClosestPoints {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<Point> points = new ArrayList<>();

        System.out.println("请输入坐标(每行输入x y,输入-1终止):");
        while (true) {
            String input = scanner.nextLine().trim();
            // 检测终止条件
            if (input.equals("-1")) {
                break;
            }
            // 分割x和y值
            String[] parts = input.split("\\s+");
            if (parts.length != 2) {
                System.out.println("请输入正确格式的坐标(x y),重新输入!");
                continue;
            }
            try {
                double x = Double.parseDouble(parts[0]);
                double y = Double.parseDouble(parts[1]);
                points.add(new Point(x, y));
            } catch (NumberFormatException e) {
                System.out.println("坐标值必须是数字,重新输入!");
            }
        }
        scanner.close();

        // 检查是否有足够的点(至少2个才能计算点对)
        if (points.size() < 2) {
            System.out.println("至少需要输入2个坐标才能计算最小距离!");
            return;
        }

        // 计算并输出最小距离
        double minDistance = findMinimumDistance(points);
        System.out.printf("距离最小的点对的距离是:%.2f%n", minDistance);
    }

3. 实现欧氏距离计算方法

写一个静态方法,传入两个Point对象,返回它们之间的欧氏距离:

// 计算两点间的欧氏距离
    private static double calculateDistance(Point p1, Point p2) {
        double dx = p1.getX() - p2.getX();
        double dy = p1.getY() - p2.getY();
        return Math.sqrt(dx * dx + dy * dy);
    }

4. 寻找距离最小的点对

通过双重循环遍历所有不重复的点对,计算每对点的距离,记录最小的那个值:

// 寻找所有点对中的最小距离
    private static double findMinimumDistance(List<Point> points) {
        double minDist = Double.MAX_VALUE;
        int n = points.size();

        // 遍历所有不重复的点对(i从0到n-2,j从i+1到n-1)
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                double distance = calculateDistance(points.get(i), points.get(j));
                if (distance < minDist) {
                    minDist = distance;
                }
            }
        }
        return minDist;
    }
}

代码说明

  • 输入处理部分做了简单的异常判断,避免用户输入错误格式的内容导致程序崩溃,新手也能轻松理解。
  • 点对遍历的时候从j = i + 1开始,避免重复计算(比如点A和点B,不用再算一次点B和点A),稍微提升了一点效率。
  • 最后用printf格式化输出结果,保留两位小数,看起来更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:34:27