簡體   English   中英

使用遞歸的手機文本預測(Java)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM