检查单词是否在数组中

问题描述 投票:-2回答:2

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

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;
}
java loops
2个回答
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而不是设置局部变量和breaking。


我不知道count是什么,但<=看起来很危险,导致ArrayIndexOutOfBoundsException


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;
© www.soinside.com 2019 - 2024. All rights reserved.