我为分配给我们的问题写了一些代码,而我当前的代码一直给我错误的输出。问题的提示如下:
有些人可能知道,没有比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
答案 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;
}