0
public class WordArray {
        public char[] str;
        public int[] index;
}

这是一个在字符数组中存储单词的类str

public class DuplicateArray {
    WordArray wordArray[];
    int size;

    public static DuplicateArray getDupArray(int size , String string[]){
        DuplicateArray da = new  DuplicateArray();
        da.size = size;
        da.wordArray = new WordArray[da.size];
        for (int i = 0; i < da.size; i++) {
            da.wordArray[i] = new WordArray();
            da.wordArray[i].str = new char[string[i].length()];
            da.wordArray[i].index = new int[da.size];
            da.wordArray[i].str = string[i].toCharArray();
            da.wordArray[i].index[i] = i;       
        }
        return da;

    }
}

此类使用WordArray该类并将单个单词从 String 数组复制string 到 each 中的字符str数组wordArray[i]

首先,我想对存储在str每个wordArray.

然后我想对中的每个单词进行排序,wordArray但我想保留单词的原始索引以 string供以后使用。为此,我正在使用此类:

public class PrintAnagram {

    public static void printAnagram(String[] string) {
        DuplicateArray da = DuplicateArray.getDupArray(string.length, string);

        for (int i = 0; i < string.length; i++) {
            Arrays.sort(da.wordArray[i].str);
        }
        Arrays.sort(da.wordArray);

        for (int i = 0; i < string.length; i++){
            System.out.println(string[da.wordArray[i].index[i]]);
        }

    }

}

但是类种姓异常发生在 ComparableTimsort 之类的,我不知道。根据我在上一个问题中所读到的内容,我们必须覆盖compareTo. 但是我不知道在哪里覆盖它,我应该在PrintAnagramclass 中覆盖它,我实际上是在哪里排序,还是应该在 inWordArray或 in 中覆盖它DuplicateArray。如果有人有时间解释这些东西,那么请或者你可以向我指出一些资源,其中所有这些都得到了清楚的解释。我对Java相当陌生。

例外:

Exception in thread "main" java.lang.ClassCastException: self.study.WordArray cannot be cast to java.lang.Comparable
    at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:290)
    at java.util.ComparableTimSort.sort(ComparableTimSort.java:157)
    at java.util.ComparableTimSort.sort(ComparableTimSort.java:146)
    at java.util.Arrays.sort(Arrays.java:472)
    at self.study.PrintAnagram.printAnagram(PrintAnagram.java:13)
    at self.study.AnagramTogether.main(AnagramTogether.java:7)
4

2 回答 2

2

您的类WordArray应该实现Comparable要使用Arrays.sort函数进行排序的接口。

所以签名WordArray应该是这样的:

public class WordArray implements Comparable<WordArray>

并且该类应实现该方法:

public int compareTo(WordArray compareWordArray)

Comparator或者您应该提供方法接口的显式实现sort

有关详细信息,请参阅

于 2013-08-24T13:50:08.983 回答
2

正如@Rahaman 所说。

或者您可以将比较器定义为第二个参数。

Arrays.sort(da.wordArray, comparator);
于 2013-08-24T13:54:53.097 回答