编辑:比较器似乎没有做任何事情。我没有收到任何错误,但(已经按字母顺序排序的)数组没有改变。我应该期望看到 SAD 和 PAD 并排,但我没有。
我有一个字符串数组,我想根据从如何在拨号盘上键入它们得出的数值对它们进行排序。也就是说,“SAD”= 723,“PAD”= 723,“SAP”= 727。我有一个按字母顺序排列的字典,我想将它重新排列成我的顺序,以便对数组进行二进制搜索。对于像 SAD 和 PAD 这样的值相同的东西,它们可以按字母顺序排序。我想尝试使用 Arrays.sort(dictionary, myComparator) 对其进行排序。
首先,这是获得我想要的东西的最佳方式吗?我还能怎么得到这个?
其次,我如何制作自己的比较器?请注意,我只是在编程的第一门课程中,所以我们甚至还没有上课,这只是一堆塞进主课的东西。而且我通常根本不了解课程。因此,如果我必须自己编写课程来完成这项工作,那么我可能不得不自己编写一个快速排序代码。我也没有介绍链表,所以我的数据结构有点笨拙。这是我到目前为止所拥有的,我不知道我在做什么:
将字典放入内存的愚蠢笨拙的方法,重要的行在底部附近:
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 是我的字符串到拨号盘号码的转换方法