0
  for(int i = 0; i < distance.length; i++) {
        for (int j = 0; j < distance.length; j++) {
            if (distance[i] == distance[j]) {
                if (x[i] > x[j]) {
                    x = swapInt(x, j, i);
                    input = swapString(input, j, i);
                }
            }
        }
    }

distance 表示点到原点的距离
x 是点的 x 坐标
输入是用户的原始输入
我希望这个循环按 x 坐标的升序排列点,如果它们的距离相同但是,当我运行它时,它按降序排列
我应该怎么做才能解决这个问题?

 public static int[] swapInt (int[] a, int i, int j) {
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
    return a;
}
4

2 回答 2

2

改变

if (x[i] > x[j]) {

if (x[i] < x[j]) {

这将改变排序顺序:在原来的情况下,如果 i'th 大于 j'th,则交换两个值,现在在相反的情况下交换它们:j'th 大于 i'th

于 2012-04-14T14:54:41.987 回答
-1

我会更喜欢以下方式,因为它更干净,可读。

class Distance implements Comparable{
int x;
int y;
@Override
public int compareTo(Object o) {
    Distance other=(Distance)o;
    if(this.distanceFromOrigin() > other.distanceFromOrigin())
        return 1;
    else if(this.distanceFromOrigin() < other.distanceFromOrigin())
        return -1;
    else 
        return this.x - other.x;

}
int distanceFromOrigin(){
    return x*x+y*y;
}

}

现在创建一个距离数组/列表并使用 Collections.sort 来获得您想要的顺序。

于 2012-04-14T15:07:36.113 回答