Java wordsearch方法,搜索给定的2d数组

时间:2017-04-01 17:59:34

标签: java

我正试图将一个单词传递给我的findWord方法,该方法检查一个2d数组的stype String [] []“a”表示所述单词。行和列是“a”的维度。我没有检查对角线或反向,只是向前。我相信几乎所有的逻辑都是正确的,但我认为我得到了一个界限错误。没有抛出任何错误,但是在随机情况下返回false应该返回true时,代码无法正常工作。代码编译并运行正常。 (即检查过去存在的列数)

public boolean findWord(String word)  {
    int cL = column;
    for(int i = 0; i < row; i++) {
        for(int j = 0; j < column; j++) {
            if(a[i][j].equals(word.substring(0,1))) {
                int c = 1;
                int parameter = j + word.length();
                if(parameter <= cL) {
                    for(int k = j; k < parameter; k++) {
                        if(!a[i][k].equals(word.substring(c,c+1)))
                            return false;
                        c++;
                    }
                    return true;
                }
            } else {
                return false;
            }
        }
    }
    return true;
}

1 个答案:

答案 0 :(得分:1)

我运行了一些测试用例。我还没有找到一个案例,尽管单词在数组中,你的方法返回true

我在您的代码中看到的缺陷是:

您开始查看a[0][0]。如果此处找到的字符串不等于您单词的第一个字母,则立即返回false而不再查看。

假设单词的第一个字母与a[0][0]匹配。现在您将c设置为1,但由于ik为0,您现在将该单词的第二个字母与a[0][0]进行比较。这不太可能匹配。它只是以两次相同的字母开头。

最后,我确实设法获得StringIndexOutOfBoundsException,即通过搜索包含aaab的行中的c。第二次通过最里面的循环c是2,因此你试图取出长度为2的单词的索引2和3之间的子串。

你有一些事要做。享受你的工作。