我如何安排从小到大的x值?

时间:2012-04-14 14:48:14

标签: java arrays sorting

  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);
                }
            }
        }
    }

距离表示点与原点的距离 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;
}

2 个答案:

答案 0 :(得分:2)

更改

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

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

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

答案 1 :(得分:-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来获得所需的订单。