设计一个 Position类,该类有x和y两个成员变量表示坐标。要求该类实现Comparable<T>接口的compareTo()方法,实现比较两个Position对象到原点(0,0)的距离之差。并写出测试实例,让代码运行
时间: 2024-12-02 09:21:10 浏览: 25
自定义的Troop<T>泛型类( c++, java和c#)的实现代码
设计一个名为 `Position` 的类,用于表示二维空间中的坐标,我们可以这样做:
```java
public class Position implements Comparable<Position> {
private double x;
private double y;
// 构造函数
public Position(double x, double y) {
this.x = x;
this.y = y;
}
// 获取和设置坐标值
public double getX() { return x; }
public double getY() { return y; }
// 计算距离到原点的方法
@Override
public int compareTo(Position other) {
double distanceThis = Math.sqrt(x * x + y * y);
double distanceOther = Math.sqrt(other.getX() * other.getX() + other.getY() * other.getY());
if (distanceThis < distanceOther) {
return -1; // 这个位置离原点更近
} else if (distanceThis > distanceOther) {
return 1; // 其他位置离原点更近
} else {
return 0; // 如果两者距离相等
}
}
}
// 测试示例
public class Main {
public static void main(String[] args) {
Position pos1 = new Position(1, 2);
Position pos2 = new Position(-1, -1); // 更靠近原点
System.out.println("pos1与原点的距离差: " + pos1.compareTo(pos2)); // 输出应该是正数,因为pos2更近
System.out.println("pos2与原点的距离差: " + pos2.compareTo(pos1)); // 输出应该是负数,因为pos1更远
Position pos3 = new Position(0, 0); // 直接比较本身,应返回0
System.out.println("pos3与自身距离差: " + pos3.compareTo(pos3)); // 输出应为0,表示距离相等
}
}
```
上述代码首先实现了 `Comparable<Position>` 接口,通过 `compareTo()` 方法计算每个 `Position` 对象到原点的距离,并按距离从近到远排序。然后提供了一个简单的测试场景,展示了如何在实际应用中使用这个类。
阅读全文