我想我可能会失去理智,因为我无法解释为什么我的Array没有根据x
进行排序。是否有人可以快速浏览并让我知道我错过了什么?
我的目标是,如果我有一对(x,y)
对,可以根据x
从最大到最小对对象进行排序。根据我需要减去哪个对象,但实际比较可能是关闭的,但目前还没有进行排序。
据我所知,这是一个很好的问题,基于Google上出现的众多结果,但我觉得好像我已经按照这些答案而没有得到结果。
static class Point implements Comparable<Point> {
long x, y;
public Point(long x, long y) {
this.x = x;
this.y = y;
}
public int compareTo(Point o) {
if((this.x - o.x) > 0) return 1;
else if ((this.x - o.x) < 0) return -1;
return 0;
}
public long getX() {
return x;
}
}
以下是我用来调用sort
并打印数组的方法。它与Point
在同一个父类中:
static double minimalDistance(int[] x, int y[]) {
double ans = Double.POSITIVE_INFINITY;
Point[] pairs = new Point[x.length];
for(int i = 0; i < x.length; i++){
pairs[i] = new Point(x[i], y[i]);
System.out.println(x[i] + " " + y[i]);
}
Arrays.sort(pairs, Point::compareTo);
System.out.println();
for(int i = 0; i < x.length; i++){
pairs[i] = new Point(x[i], y[i]);
System.out.println(x[i] + " " + y[i]);
}
return ans;
}
答案 0 :(得分:1)
您正在正确排序。但是你正在排序pairs
数组。
在下面的一行中:
Arrays.sort(pairs, Point::compareTo);
System.out.println();
for(int i = 0; i < x.length; i++){
pairs[i] = new Point(x[i], y[i]); // <=== I mean this line
System.out.println(x[i] + " " + y[i]);
}
您再次覆盖pairs
。所以它看起来好像没有排序。
如果您要更新x[]
和y[]
数组,请执行以下操作:
Arrays.sort(pairs, Point::compareTo); // Arrays.sort(pairs); would also work
System.out.println();
for(int i = 0; i < x.length; i++){
x[i] = (int) pairs[i].x; // added this line
y[i] = (int) pairs[i].y; // added this line
System.out.println(x[i] + " " + y[i]);
}