检查单词是否在数组中

时间:2018-01-02 16:51:38

标签: java loops

我有一个方法来检查单词是否在给定的数组中/但是,它无法给我正确的返回值。有什么建议吗?

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;
}

2 个答案:

答案 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块。

进一步改进:returnif而不是设置本地变量和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;