编辑:比较器似乎没有做任何事情。我没有错误,但(已按字母顺序排序)数组没有变化。我希望看到SAD和PAD彼此相邻,但我不是。
我有一个字符串数组,我想根据它们如何在拨号盘上输出它们的数值对它们进行排序。也就是说,“SAD”= 723,“PAD”= 723,“SAP”= 727.我有一个按字母顺序排列的字典,我想将其重新排列到我的订单中,以便对数组进行二进制搜索。对于像SAD和PAD这样的值是相同的值,它们可以按字母顺序排序。我想尝试使用Arrays.sort(字典,myComparator)对其进行排序。
首先,这是获得我想要的最佳方式吗?我怎么可能得到这个?
其次,我如何制作自己的比较器?请注意,我只是在编程的第一门课程中,所以我们甚至还没有编写课程,它只是一堆塞进主类的东西。而且我通常根本不了解课程。因此,如果我必须去创建自己的类来完成这项工作,那么我可能需要自己编写一个快速编码。我没有覆盖链表,所以我的数据结构有点笨拙。这是我到目前为止所做的,我不知道我在做什么:
愚蠢的clumsey方式将字典放入内存,重要的一行是靠近底部:
public static String[][] dictToMem()throws FileNotFoundException{
File myFile = new File("src/words.txt");
Scanner input = new Scanner(myFile);
String temp;
String[] tempDict = new String[7];
Arrays.fill(tempDict, "");
while (input.hasNext()){
temp = input.next();
if (temp.length() < 8 && temp.indexOf('\'') + temp.indexOf('(') + temp.indexOf('-') == -3){
for (int i = 1; i <= 7; i++){
if (temp.length() == i){
tempDict[i-1] += " " + temp;
}
}
}
}
for (int i = 0; i<tempDict.length; i++){
tempDict[i] = tempDict[i].trim();
}
String[][] dictionary = new String[7][];
for (int i = 0; i<tempDict.length; i++){
dictionary[i] = tempDict[i].split(" ");
}
for (int i = 0; i<tempDict.length; i++){
// ***This is the line doesn't work, compiler error***
// dictionary[i] = Arrays.sort(dictionary[i], String.DialPadNumCompare);
// Should be this:
Arrays.sort(dictionary[i], DialPadNumCompare);
}
return dictionary;
}
并且比较器没有显示错误:
public static Comparator<String> DialPadNumCompare = new Comparator<String>(){
@Override
public int compare(String a, String b){
if (stringToInt(a) == stringToInt(b)){
return a.compareTo(b);
}
return stringToInt(b) - stringToInt(a);
}
};
String to int是我拨打pad号码转换方法的字符串
答案 0 :(得分:2)
您的比较器不正确。将其更改为:
public static Comparator<String> dialPadNumCompare = new Comparator<String>(){
@Override
public int compare(String a, String b){
int inta = stringToInt(a);
int intb = stringToInt(b);
if (inta == intb)
return a.compareTo(b);
return inta - intb;
}
};
使用以下代码调用此比较器:
Arrays.sort(dictionary, dialPadNumCompare);
答案 1 :(得分:0)
对于您的即时错误,请更改以下行:
Arrays.sort(dictionary[i], String.DialPadNumCompare);
要:
Arrays.sort(dictionary[i], DialPadNumCompare);
现在你的方式,你试图静态引用String
类的不存在的成员。相反,您应该尝试引用您在自己的类中创建的静态引用DialPadNumCompare
。