2

编辑:比较器似乎没有做任何事情。我没有收到任何错误,但(已经按字母顺序排序的)数组没有改变。我应该期望看到 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 是我的字符串到拨号盘号码的转换方法

4

2 回答 2

3

您的比较器不正确。将其更改为:

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);

这是现场演示

于 2012-11-25T06:57:32.450 回答
0

对于您的直接错误,请更改以下行:

Arrays.sort(dictionary[i], String.DialPadNumCompare);

至:

Arrays.sort(dictionary[i], DialPadNumCompare);

你现在拥有它的方式,你试图静态引用String该类的一个不存在的成员。相反,您应该尝试引用DialPadNumCompare您在自己的类中创建的静态引用。

于 2012-11-25T05:36:56.797 回答