2012-04-14 1 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
입력
내가 오름차순 포인트를 정렬이 루프를 원하는 사용자에 의해 포인트들의 원래 입력되는 점의 좌표 그들의 거리가 동일하면 x 좌표를위한 순서 그러나 나는 그것을 실행할 때 내림차순으로 정렬합니다
이것을 해결하려면 어떻게해야합니까? i 번째는 j 번째보다 큰 경우 지금, 당신은 두 개의 값을 교환 원본에 :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]) { 

에이 정렬 순서가 변경됩니다 당신은 그 반대가 사실 일 때 그들을 바꾼다 : j'th는 i'th보다 크다

-1

나는 그것이 다음과 같은 방법을 더 좋아할 것이다. 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를 사용합니다.

관련 문제