-1

簡単なスペルチェッカープログラムを書いていますが、ループに問題があり、理解できないようです。これが私のコードです

public class spellchecker {

public static void main(String[] args) {

    // setting up dictionary
    String[] dictionary = {"win","winner","know","born","were","plan","must","you","correct","college", "to"} ;


    //defining our sentence
    String sentence = "You were born to win but to be a winners you must plan to win prepare to win and expect to win";
    //splitting sentence into an array of words
    String[] split = sentence.split("\\s");

    for(int i = 0; i<split.length; i++)
    {
        if(split[i].equals(dictionary[0]) || split[i].equals(dictionary[1]) || split[i].equals(dictionary[2]) || split[i].equals(dictionary[3]) || split[i].equals(dictionary[4]) || split[i].equals(dictionary[5]) || split[i].equals(dictionary[6]) ||  split[i].equals(dictionary[7]) || split[i].equals(dictionary[8]) || split[i].equals(dictionary[9]) || split[i].equals(dictionary[10]) || split[i].equals(dictionary[11]))
        {
            System.out.println(split[i] + " is valid");
        }           

        else
        {
            System.out.println(split[i] + " is invalid, please correct");
        }

        }
    }
}
4

4 に答える 4

3

配列のインデックスは から までのみ実行され0ますn - 1。ここでは、dictionary長さ 11 の配列を使用すると、 0~になり10ます。11ただし、ここで明示的にインデックスを参照します。

|| split[i].equals(dictionary[10]) || split[i].equals(dictionary[11]))

から始めて、それらすべてを明示的にチェックしている0ので、最後のもの ( 11) を削除するだけです。

|| split[i].equals(dictionary[10]))

しかし、辞書にさらに 5 つの単語を追加するとどうなるでしょうか。50? 条件の長い連鎖ifも成長する必要があります。柔軟性を確保するために、配列forのすべての内容に対するループを検討する必要があります。dictionaryさらに良いHashSetことに、入力した単語ごとに辞書全体をスキャンする必要がないように、 を使用して辞書の単語を保存することを検討してください。

于 2013-09-25T20:35:48.913 に答える
1

配列には 11 個の要素 ( 0- 10) があります。したがって、11 は範囲外です。

split[i].equals(dictionary[11]

インデックスをハードコーディングするのではなく、何らかの方法でループを使用することを検討したい場合があります。

于 2013-09-25T20:35:44.703 に答える
1

より一般的な解決策として、大きな if を次のように置き換えます。

if(Arrays.asList(dictionary).contains(split[i]))

これは、どの辞書でも機能します。

于 2013-09-25T20:39:31.520 に答える
0

split[i].equals(dictionary[11])あなたのif()状態から取り除く

すなわち

あなたの場合

if(split[i].equals(dictionary[0]) || split[i].equals(dictionary[1]) ||   split[i].equals(dictionary[2]) || split[i].equals(dictionary[3]) ||   split[i].equals(dictionary[4]) || split[i].equals(dictionary[5]) ||  split[i].equals(dictionary[6]) ||  split[i].equals(dictionary[7]) || split[i].equals(dictionary[8]) || split[i].equals(dictionary[9]) || split[i].equals(dictionary[10]))
于 2013-09-25T20:36:32.813 に答える