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

距離は原点からのポイントの距離を表します
x はポイントの x 座標です
入力はユーザーによるポイントの元の入力です
i の距離が同じ場合、このループでポイントを 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 番目が j より大きい場合は 2 つの値を交換しますが、逆の場合はそれらを交換します。j 番目が i より大きい場合

于 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 に答える