2012-04-14 5 views
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?

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

Как получается, что один массив примитивов хранит координаты x и y – ManojGumber

ответ

2

Изменить

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

в

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

Это изменит порядок сортировки: в оригинале вы поменяться два значения, если i-й больше -й, теперь вы меняете их, когда имеет место обратное: j'th больше, чем i'th

-1

Я предпочту следующий способ, так как это больше cl ean, читаемый.

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, чтобы получить желаемый порядок.

Смежные вопросы