我有一个方法来检查单词是否在给定的数组内/但是,它无法给我正确的返回值。有什么建议吗?
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;
}
你的代码正确缩进看起来像
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
ing。
我不知道count
是什么,但<=
看起来很危险,导致ArrayIndexOutOfBoundsException
。
用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;