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
コピーします。string
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 か何かで 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)