我正试图将一个单词传递给我的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;
}
答案 0 :(得分:1)
我运行了一些测试用例。我还没有找到一个案例,尽管单词在数组中,你的方法返回true
。
我在您的代码中看到的缺陷是:
您开始查看a[0][0]
。如果此处找到的字符串不等于您单词的第一个字母,则立即返回false
而不再查看。
假设单词的第一个字母与a[0][0]
匹配。现在您将c
设置为1,但由于i
和k
为0,您现在将该单词的第二个字母与a[0][0]
进行比较。这不太可能匹配。它只是以两次相同的字母开头。
最后,我确实设法获得StringIndexOutOfBoundsException
,即通过搜索包含aa
,a
,b
的行中的c
。第二次通过最里面的循环c
是2,因此你试图取出长度为2的单词的索引2和3之间的子串。
你有一些事要做。享受你的工作。