-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更好的是,考虑使用 aHashSet来存储您的字典单词,这样您就不必为每个输入的单词扫描整个字典。

于 2013-09-25T20:35:48.913 回答
1

您的数组有 11 个元素 ( 0- 10)。所以 11 越界了。

split[i].equals(dictionary[11]

您可能真的想考虑以某种方式使用循环,而不是对索引进行硬编码。

于 2013-09-25T20:35:44.703 回答
1

如需更通用的解决方案,请将您的 big if 替换为:

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

这适用于任何字典。

于 2013-09-25T20:39:31.520 回答
0

split[i].equals(dictionary[11])从你的if()条件中删除

IE

你的如果可能

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 回答