[英]Cell phone text prediction using recursion (Java)
我在學校的Java作業上遇到了麻煩。 我們需要編寫一個程序來執行某些手機使用的T9 Word文本預測。 它應該接受用戶輸入的數字,找到與這些數字相對應的字母的每種可能組合,為每種可能的組合搜索詞典,並顯示在詞典中找到的那些組合。 該程序的大部分內容已經由教授為我們編寫,我只需要填寫predictText方法就可以了。 它通過調用另一種使用遞歸二進制搜索的方法來進行搜索,盡管我非常確定自己的搜索方法運行良好,但我也必須自己填寫。 這是我的預報文本方法,其中參數“字母”是當前正在處理的字母,參數輸入是用戶的輸入,參數“ wordMatches”是在詞典中找到的單詞列表。
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
}
}
那我得到的結果是,它僅顯示單個字母,它似乎並沒有字母被組合成詞和搜索字典對那些完整的詞。 萬一需要進一步解釋,以下是分配說明:
“您將從輸入字符串中提取第一個數字,然后再次調用預報文本,對於每個可能的字母,第一個數字可以表示一次,將字母添加到可變詞中,並且從輸入中去除第一個數字。例如,如果第一次進入ForecastText的單詞為空,並且輸入為“ 4663”,則您將遞歸調用預測文本3次,其中:•word為“ g”,輸入為“ 663”,•word為“ h”,輸入為“ 663” ”,•單詞為“ 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;
}
您只在尋找一個字母的單詞:
String finalWord = "";
finalWord += letter;
追加到String
,您只需要一個字母單詞即可。 如果其唯一嘗試StringBuffer
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.