我爲分配給我們的問題編寫了一些代碼,並且我當前的代碼不斷給我提供錯誤的輸出。這個問題的提示如下:Java CompareTo方法
就像你們中的一些人可能知道的那樣,沒有比JOHN更好的名字。我們來定義比較名字的規則。每個字母都有一個重量('A' - 1,'B' - 2,...,'Z' - 26)。名稱的權重是所有字母的權重總和。例如,名稱MARK的權重爲13 + 1 + 18 + 11 = 43. 當比較兩個名稱時,權重較大的那個被認爲更好。如果是平局,那麼按字母順序排列的更好。但有一個例外 - 約翰這個名字是所有人的最好名字。 給您一個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方法,但沒有什麼區別。你們能告訴我我在這裏做錯了嗎?
感謝, 朱奈德
我弄得* *,爲什麼不'返回a.compareTo(B);'?此外,你可以嘗試我的[ComparableComparator](http://www.frischcode.com/2013/11/help-i-have-comparable-but-i-need.html) –