Java CompareTo方法

时间:2014-02-13 04:25:24

标签: 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方法摆弄,但它并没有什么区别。你能告诉我我在这里做错了吗?

谢谢, Junaid

1 个答案:

答案 0 :(得分: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;

    }