我有一个方法来检查单词是否在给定的数组中/但是,它无法给我正确的返回值。有什么建议吗?
words [] = {Dog, Cat, Fish, Horse};
WordList wl = new WordList();
if (wl.findWord("Cat") >= 0) {
System.out.println("Cat is in the word list");
}
if (wl.findWord("Dog") >= 0) {
System.out.println("Dog is in the word list");
}
public int findWord(String w) {
// Loop over all words until w is found. Return index of w, or -1 if not found
int numb = 0;
for (int i = 0; i <= count; i++) {
if (w.equals(words[i])) {
numb = i;
break;
} else {
return numb = -1;
}
}
return numb;
}
答案 0 :(得分:2)
正确缩进的代码看起来像
int numb = 0;
for( int i= 0; i <= count; i++) {
if (w.equals(words[i])) {
numb = i;
break;
} else
return numb = -1;
}
return numb;
如果第一个单词与搜索不匹配,您认为会发生什么? 提示:它立即返回-1。解决方案:完全删除else
块。
进一步改进:return
内if
而不是设置本地变量和break
。
我不知道count
是什么,但<=
看起来很危险ArrayIndexOutOfBoundsException
。
答案 1 :(得分:1)
使用numb
初始化-1
,只返回循环之外。你也应该照顾你的界限。条件应为i < count
,否则您将获得ArrayIndexOutOfBoundsException
(假设count
保持数组的大小)。
int numb = -1;
for(int i= 0; i < count; i++) {
if (w.equals(words[i])) {
numb = i;
break;
}
}
return numb;
如果你想要的话,一旦你找到了这个词,你就可以完全删除局部变量。
for(int i= 0; i < count; i++) {
if (w.equals(words[i])) {
return i;
}
}
return -1;