2014-02-13 110 views
0

我爲分配給我們的問題編寫了一些代碼,並且我當前的代碼不斷給我提供錯誤的輸出。這個問題的提示如下: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方法,但沒有什麼區別。你們能告訴我我在這裏做錯了嗎?

感謝, 朱奈德

+0

我弄得* *,爲什麼不'返回a.compareTo(B);'?此外,你可以嘗試我的[ComparableComparator](http://www.frischcode.com/2013/11/help-i-have-comparable-but-i-need.html) –

回答

0

這是我會怎麼做,

 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; 

     if (a.equals("JOHN")) { 
      countA = Integer.MAX_VALUE; 
     } else { 
      for (int i = 0; i < a.length(); i++) { 
       int temp = greatMap.get(a.charAt(i)); 
       countA += temp; 
      } 
     } 
     if (b.equals("JOHN")) { 
      countB = Integer.MAX_VALUE; 
     } else { 
      for (int i = 0; i < b.length(); i++) { 
       int temp = greatMap.get(b.charAt(i)); 
       countB += temp; 
      } 
     } 

     if (countB == countA) { 
      return a.compareTo(b); 
     } 

     return countB - countA; 

    } 
+0

這很好,因爲他有返回語句 –

+0

你是對的,'else'毫無意義,雖然 – Camilo

+0

我有一個問題。你爲什麼返回計數B計數A,而不是計數A - countB? – user2904796