学校の Java の課題で困っています。特定の携帯電話で使用される T9 Word テキスト予測を行うプログラムを作成する必要があります。ユーザーの数字の入力を受け取り、それらの数字に対応する文字のすべての可能な組み合わせを見つけ、それらの可能な組み合わせのそれぞれについて辞書を検索し、辞書で見つかったものを表示する必要があります。このプログラムのほとんどは、教授によって既に作成されています。可能性の組み合わせを行う predictText メソッドを入力する必要があるだけです。再帰的バイナリ検索を使用する別のメソッドを呼び出して検索を行いますが、これも自分で入力する必要がありましたが、私の検索メソッドがうまく機能していることは確かです。これが私の predictText メソッドです。パラメータ「文字」は現在処理中の文字です。
public static void predictText(String letter, String input, ArrayList<String> wordMatches)
{
String[] two = new String[] {"a", "b", "c"};
String[] three = new String[] {"d", "e", "f"};
String[] four = new String[] {"g", "h", "i"};
String[] five = new String[] {"j", "k", "l"};
String[] six = new String[] {"m", "n", "o"};
String[] seven = new String[] {"p", "q", "r", "s"};
String[] eight = new String[] {"t", "u", "v"};
String[] nine = new String[] {"w", "x", "y", "z"};
char firstDigit;
String finalWord = "";
finalWord += letter;
if (input.equals(""))
{
int lookup = search(finalWord.trim());
if (lookup != -1)
{
wordMatches.add(allWords[lookup]);
}
}
else
{
firstDigit = input.charAt(0);
input = input.substring(1);
if (firstDigit == '2')
{
for (int i = 0; i < two.length; i++)
{
letter = two[i];
predictText(letter, input, wordMatches);
}
}
else if (firstDigit == '3')
{
for (int i = 0; i < three.length; i++)
{
letter = three[i];
predictText(letter, input, wordMatches);
}
}
// And so forth, up to 9
}
}
私が得ている結果は、単一の文字のみを表示していることです。文字を単語に組み合わせて、それらの完全な単語を辞書で検索しているようには見えません。さらに説明が必要な場合に備えて、割り当ての手順を次に示します。
「入力文字列から最初の数字を取得し、変数 word に文字を追加し、最初の数字を入力から削除して、最初の数字が表す可能性のある文字ごとに 1 回、predictText を再度呼び出します。たとえば、 、predictText への最初の単語が空で入力が「4663」の場合、predictText を次のように 3 回再帰的に呼び出します。 」, • 単語を「i」、入力を「663」 このプロセスが繰り返され、単語を作成し続けます (つまり、単語が「g」で次の桁が 6 の場合、「gm」で再帰的に呼び出すことになります) 」、「gn」、および「go」と入力「63」を使用する) 再帰的に処理する入力がなくなると、基本ケースに到達したので、検索メソッドを呼び出して、生成した単語が中に存在するかどうかを確認します。もしそうなら、wordMatches リストに追加してください。」
編集:実際に問題が発生している場合に備えて、検索方法のコードを含める必要があるとも考えました。
public static int search(String key)
{
return search(allWords, key, 0, allWords.length-1);
}
public static int search(String[] dictionary, String key, int start, int end)
{
int middle = start + ((end - start) / 2);
int index = -1;
if (start > end)
{
index = -1;
}
else if (key.compareToIgnoreCase(dictionary[middle]) == 0)
{
index = middle;
}
else if (key.compareToIgnoreCase(dictionary[middle]) < 0)
{
index = search(dictionary, key, start, middle - 1);
}
else
{
index = search(dictionary, key, middle + 1, end);
}
return index;
}