2017-05-30 45 views
0

私は障害のある人のためのDisplaykeyboardに取り組んでいます。私は自動単語補完機能を追加しようと考えています。 私が必要とするように働くoracleの例が見つかりました。その別の例:TextAreaDemo問題は、私は本当に検索アルゴリズムを理解していないと問題は、私はarraylistに検索アルゴリズムが正しく動作を停止するいくつかの単語を追加するときです。自動補完機能Java

String prefix = content.substring(w + 1).toLowerCase(); 
int n = Collections.binarySearch(words, prefix); 
if (n < 0 && -n <= words.size()) { 
    String match = words.get(-n - 1); 
    if (match.startsWith(prefix)) { 
     // A completion is found 
     String completion = match.substring(pos - w); 
     // We cannot modify Document from within notification, 
     // so we submit a task that does the change later 
     SwingUtilities.invokeLater(
     new CompletionTask(completion, pos + 1)); 
} 
} else { 
// Nothing found 
mode = Mode.INSERT; 
} 

どのような単語でも動作するようにサンプルを変更する方法はありますか?

+0

を例へのリンクがhttp://docs.oracle.com/javase/tutorial/uiswing/components/textarea.html – QFireball

+0

'binarySearch'がソートさに依存していますあなたは単語を追加した後にあなたのリストを再度ソートしないと思いますか? –

+0

リストは静的なので、これは本当に必要なものではありません – QFireball

答えて

0

リストの末尾に単語を追加してから、binarySearch()を使用していることを確認してください。イッツ・マニュアルは、次の

リスト前 この呼び出しを行うには(ソート(一覧)法などによって)その要素の自然 順序付けに従って昇順にソートしなければならないと言います。

ここでそれについての詳細を読むここでhttps://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#binarySearch(java.util.List,%20T)

+0

ああ、これは問題です。 binarySortは多くの単語で使用できるか? – QFireball

+0

絶対に。単語が多いほど、試合を見つけるのに時間がかかりますが、それはあなたがそれを使用するために十分に速くなければなりません – Headline