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;

    }
}

このクラスは クラスを使用し、個々の単語を String 配列からeach の文字配列にWordArrayコピーします。stringstrwordArray[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 か何かで Class カーストの例外が発生しますが、それについてはわかりません。前の質問で読んだことから、compareTo. しかし、私はそれをオーバーライドする場所がわかりません。PrintAnagram実際にソートしている class でオーバーライドする必要がありますか、WordArrayまたは でオーバーライドする必要があります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

@Rahamanが言うように。

または、コンパレーターを 2 番目のパラメーターとして定義することもできます。

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

クラスは、関数を使用してソートされるWordArrayインターフェイスを実装する必要があります。ComparableArrays.sort

したがって、の署名は次のWordArrayようになります。

public class WordArray implements Comparable<WordArray>

クラスはメソッドを実装する必要があります:

public int compareTo(WordArray compareWordArray)

Comparatorまたは、メソッドへのインターフェイスの明示的な実装を提供する必要がありますsort

詳しくはこちらをご覧ください

于 2013-08-24T13:50:08.983 に答える