Java 点比较器
Java Point Comparator
编写一个比较器,根据点对象与原点 (0,0) 的距离来比较它们。离原点较近的点被认为先于离原点较远的点。
我只是想知道我是否在正确的轨道上……以及我遗漏了什么
public class PointComparator implements Comparator<Point>
{
public int compare(Point p1, Point p2)
{
int dx = p1.x - p2.x;
if (dx == 0){
int dy = p1.y - p2.y;
return dy;
}else{
return dx;
}
}
}
该点到原点的距离为 sqrt(x 平方 + y 平方)。计算两个点的值并取差值进行比较。
我认为您所做的是将点一起进行比较,而不是将其与原点进行比较。所以你最好在编码之前了解你想要什么。
无论如何,坐标为 (x1,y1) 和 (x2,y2) 的两点之间的距离是
sqrt((x1-x2)^2 + (y1-y2)^2)
您的情况下的坐标之一是 (0,0) 即原点。
找出点到原点的距离,例如:
double r1 = Math.sqrt(x1*x1 + y1*y1)
注意double,不是int。那么:
return Double.compare(r1, r2);
编写一个比较器,根据点对象与原点 (0,0) 的距离来比较它们。离原点较近的点被认为先于离原点较远的点。
我只是想知道我是否在正确的轨道上……以及我遗漏了什么
public class PointComparator implements Comparator<Point>
{
public int compare(Point p1, Point p2)
{
int dx = p1.x - p2.x;
if (dx == 0){
int dy = p1.y - p2.y;
return dy;
}else{
return dx;
}
}
}
该点到原点的距离为 sqrt(x 平方 + y 平方)。计算两个点的值并取差值进行比较。
我认为您所做的是将点一起进行比较,而不是将其与原点进行比较。所以你最好在编码之前了解你想要什么。 无论如何,坐标为 (x1,y1) 和 (x2,y2) 的两点之间的距离是 sqrt((x1-x2)^2 + (y1-y2)^2) 您的情况下的坐标之一是 (0,0) 即原点。
找出点到原点的距离,例如:
double r1 = Math.sqrt(x1*x1 + y1*y1)
注意double,不是int。那么:
return Double.compare(r1, r2);