編集:コンパレータは何もしていないようです。エラーは発生しませんが、(すでにアルファベット順にソートされている)配列は変更されていません。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は、文字列からダイヤルパッド番号への変換方法です。