Java通过构造器实现Point类计算两点欧氏距离 编译报错求助
Java Point类实现错误修正说明
原有代码核心问题
- 成员变量设计错误:单个Point对象仅需存储自身的x、y、z坐标即可,无需存储另一个点的坐标、两点差值等冗余变量
distanceTo方法逻辑错误:原方法计算的是当前对象内部两个重复坐标的差值,没有用到传入的Point参数q的坐标,完全不符合欧氏距离计算要求toString方法逻辑错误:原方法返回的是两点坐标差值,不是当前点本身的坐标字符串- main方法逻辑错误:
- 构造Point对象时仅传入1个字符串参数,与构造器要求的3个double参数不符,且没有将命令行输入的字符串转换为double类型
- 错误将实例方法
distanceTo当做类进行new实例化,distanceTo是成员方法,直接通过点对象调用即可 - 打印逻辑重复添加括号,
toString方法本身已经返回带括号的坐标格式 - 距离输出没有保留两位小数,不符合样例要求
修正后完整代码
public class Point { // 仅存储当前点自身的x、y、z坐标 private double x; private double y; private double z; // 构造器:初始化当前点的三个坐标 public Point(double x, double y, double z) { this.x = x; this.y = y; this.z = z; } // 计算当前点与目标点q的欧氏距离 public double distanceTo(Point q) { double dx = this.x - q.x; double dy = this.y - q.y; double dz = this.z - q.z; return Math.sqrt(dx*dx + dy*dy + dz*dz); } // 返回当前点的标准字符串格式 @Override public String toString() { return String.format("(%.1f,%.1f,%.1f)", x, y, z); } public static void main(String[] args) { // 命令行参数共6个,前3个是第一个点的坐标,后3个是第二个点的坐标 double x1 = Double.parseDouble(args[0]); double y1 = Double.parseDouble(args[1]); double z1 = Double.parseDouble(args[2]); double x2 = Double.parseDouble(args[3]); double y2 = Double.parseDouble(args[4]); double z2 = Double.parseDouble(args[5]); Point pointOne = new Point(x1, y1, z1); Point pointTwo = new Point(x2, y2, z2); double distance = pointOne.distanceTo(pointTwo); System.out.println("The first point is " + pointOne); System.out.println("The second point is " + pointTwo); System.out.printf("Their Euclidean distance is %.2f\n", distance); } }
运行验证
输入命令:java Point 2.1 3.0 3.5 4 5.2 3.5
输出结果与样例完全一致:
The first point is (2.1,3.0,3.5)
The second point is (4.0,5.2,3.5)
Their Euclidean distance is 2.90
内容的提问来源于stack exchange,提问作者gizmo.java
相关产品推荐
相关产品推荐

