2011-08-06 2 views
3

문자열의 ArrayList를 정렬하기 위해 사용자 지정 비교자를 만들었습니다. 내가 디버거를 통해 그것을 실행하고 그것을 비교하고 정확하게 값을 반환 봤어. 그러나 배열이 정렬되지 않습니다. Java & Android를 처음 접했기 때문에 계속 진행될 수 있습니다.사용자 지정 비교기를 사용하여 컬렉션 정렬이 작동하지 않습니다.

몇 시간 동안보고 난 후에 나는 무엇을 알아낼 수 없다. 그리고이 사이트를 사용하여 많은 다른 질문에 대답 해 왔기 때문에 나는 어디로 올지 알았다!

Collections.sort(allWords, new Comparator<String>(){ 
     public int compare(String o1, String o2) { 
      scoreWord sc1 = new scoreWord((String)o1); 
      scoreWord sc2 = new scoreWord((String)o2); 
      int i1 = sc1.getScore(); 
      int i2 = sc2.getScore(); 
      if (i1 > i2) 
       return 1; 
      return 0; 
     } 

     public boolean equals(String o1, String o2) { 
      scoreWord sc1 = new scoreWord((String)o1); 
      scoreWord sc2 = new scoreWord((String)o2); 
      int i1 = sc1.getScore(); 
      int i2 = sc2.getScore(); 
      if (i1 == i2) 
       return true; 
      return false; 
     } 
    }); 
+0

어떤 이유로 'equals (String o1, String o2)'메소드가 필요합니까? – home

+0

'compare (Object o1, Object o2) '와'equals (Object o1, Object o2) '를 시도하십시오. –

답변

18

귀하의 compare 방법은 대칭되지 않습니다), 점수를 전달 :

public int compare(String o1, String o2) { 
    scoreWord sc1 = new scoreWord((String)o1); 
    scoreWord sc2 = new scoreWord((String)o2); 
    return Integer.compare(i1, i2); 
} 

그렇지 않으면 고통이 솔직히입니다 손으로 그것을 할 - 두 개 이상의 장소에 필요하면, 내가 승을 제안

public int compare(String o1, String o2) { 
    scoreWord sc1 = new scoreWord((String)o1); 
    scoreWord sc2 = new scoreWord((String)o2); 
    return i1 > i2 ? 1 
     : i1 < i2 ? -1 
     : 0; 
} 

당신이 적절한 대칭해야이 방법 :

  • a.compareTo(b) < 0b.compareTo(a) > 0
  • a.compareTo(b) > 0 의미 b.compareTo(a) < 0
  • a.compareTo(b) == 0b.compareTo(a) == 0
  • 을 의미 의미를 반복을 피하기 위해 Integer.compare 당신 자신의 구현을 의식
10

이 시도 :

반환 :는 첫 번째 인수가 적은 음의 정수, 제로, 또는 양의 정수입니다 로

public int compare(String o1, String o2) { 
     scoreWord sc1 = new scoreWord((String)o1); 
     scoreWord sc2 = new scoreWord((String)o2); 
     int i1 = sc1.getScore(); 
     int i2 = sc2.getScore(); 
     if (i1 > i2) { 
      return 1; 
     } else if (i1 < i2) { 
      return -1; 
     } else { 
      return 0; 
     } 
    } 
+0

고마워요. 이것은 대학 코딩이 당신을 얻는 것입니다 ... 정렬 알고리즘이 비교에서 T/F를 요구한다는 가정 : ( – Richard

+0

@user882173 : pls는 "T/F"가 의미하는 것을 힌트를 줍니 까? – home

+0

T/F - True /그릇된 – Ankit

1

귀하의 비교가 유사한 무언가를 반환해야합니다 또는 두 번째 것보다 큼. 항상 중 하나가 가능한 경우 1 대신

0을, 당신이 사용하고있는 자바의 버전 (Integer.compare에 위임 반환 -

Source

관련 문제