우리에게 할당 된 문제에 대한 코드를 작성했으며 현재 코드가 잘못된 결과를 계속 제공합니다. 질문의 프롬프트는 다음과 같습니다.자바 CompareTo 메서드
여러분 중 일부는 알 수 있듯이 JOHN보다 더 좋은 이름은 없습니다. 이름을 비교하기위한 규칙을 정의합시다. 각 글자에는 체중이 있습니다 ('A'- 1, B - 2, ..., 'Z - 26). 이름의 가중치는 모든 문자의 가중치의 합계입니다. 예를 들어, 이름 MARK의 가중치는 13 + 1 + 18 + 11 = 43입니다. 두 개의 이름을 비교할 때 더 큰 가중치를 가진 것이 더 좋다고 간주됩니다. 동점 일 경우 사전에 사전 식으로 제공되는 것이 좋습니다. 그러나 한 가지 예외가 있습니다. JOHN이라는 이름이 모든 것 중에서 가장 좋은 이름입니다. String [] 이름이 주어지며 각 요소에는 단일 이름이 들어 있습니다. 최상으로부터 최악의 이름을 소트 해, 소트 된 String []를 돌려줍니다.
내가 쓴 코드는 다음과 같습니다 : 나는 대부분의 경우에 점점되어야 하는지를의 반대를 얻을 수있는 것처럼
public class TheBestName {
public String[] sort(String[] names) {
Arrays.sort(names, new APTComp());
return names;
}
class APTComp implements Comparator<String>{
public int compare(String a,String b){
String alphabet= "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
HashMap<Character,Integer> greatMap = new HashMap<Character,Integer>();
for(int i=0;i<alphabet.length();i++){
greatMap.put(alphabet.charAt(i), i+1);
}
int countA=0;
int countB=0;
for(int i=0;i<a.length();i++){
int temp= greatMap.get(a.charAt(i));
countA+= temp;
}
for(int i=0;i<b.length();i++){
int temp=greatMap.get(b.charAt(i));
countB+=temp;
}
if(a.equals("JOHN") && b.equals("JOHN")){
return 0;
}
if(a.equals("JOHN") && !b.equals("JOHN")){
return 1;
}
if(!a.equals("JOHN") && b.equals("JOHN")){
return -1;
}
else{
int diff= countA-countB;
if(diff!=0){
return diff;
}
if(diff==0){
return a.compareTo(b);
}
}
}
}
}
이 나타납니다. compareTo 메서드로 주변을 둘러 보았지만 차이는 없었습니다. 내가 여기서 뭘 잘못하고 있는지 말해 줄 수 있니?
감사합니다, Junaid
내가 * *, 왜'a.compareTo를 돌려 혼란 스러워요 (B)'? 또한 내 [ComparableComparator] (http://www.frischcode.com/2013/11/help-i-have-comparable-but-i-need.html) –