0

我有以下发布的方法,如图所示,它返回布尔数据类型。我写了 return 语句,但是编译器给了我一个错误说:这个方法必须返回一个布尔类型的结果。

Java代码:

public boolean isExistGuess(int guess, ArrayList<Integer> arraylist) {
    boolean found = false;

    if (arraylist.isEmpty())
        return false;

    for (int i=0; i < arraylist.size(); i++) {
        if (arraylist.get(i) == guess)
            return true;
        else continue;
    }
}
4

6 回答 6

2

你需要一个returnfor循环。该方法需要返回一些东西,以防所有if语句都失败。

public boolean isExistGuess(int guess, ArrayList<Integer> arraylist) 
{
    boolean found = false;

    if (arraylist.isEmpty()) return found;

    for (int i = 0; i < arraylist.size(); i++) 
    {
        if (arraylist.get(i) == guess) found = true;
    }
    return found; // Add return here if all else fails
}
于 2013-05-03T22:18:19.793 回答
1

是的,您确实有return语句,但是 Java 编译器坚持认为return代码可能遵循的所有执行路径的可能性都有一个语句。有可能for循环结束,然后没有return语句。

在循环return false;结束后添加一条语句。for

此外,是不必要的,因为在循环迭代else continue;中没有其他要跳过的内容。for

于 2013-05-03T22:19:19.830 回答
1

我会根据您的编写方式稍微调整您的方法。

public boolean isExistGuess(int guess, ArrayList<Integer> arraylist) {

    if (arraylist == null || arraylist.isEmpty())
        return false;

    boolean found = false;

    for (int guessItem : arraylist) {
        if (guessItem == guess) {
          found = true;
          break;
        }

    }
    return found;
}
于 2013-05-03T22:22:05.780 回答
1

具有返回类型的函数,必须以return语句结尾;在关闭大括号之前。

所以,解决方案是:

public boolean isExistGuess(int guess, ArrayList<Integer> arraylist) {
    boolean found = false;

    if (arraylist.isEmpty())
        return false;

    for (int i=0; i < arraylist.size(); i++) {
        if (arraylist.get(i) == guess)
            return true;
        else continue;
    }
    return false;
}
于 2013-05-03T22:22:07.980 回答
0

有一种编程风格,不是 Java 特有的,它坚持模块化代码应该只以一个 return 语句结束。

在某些情况下,忽略此样式规则更为明显和方便,尤其是当代码块开头的 return 语句尽早过滤掉错误条件时。

不过,您的代码块又短又甜……因此样式规则实际上使您的代码更易于遵循和理解。它还使它更加万无一失,因为您无需担心代码中的其他 return 语句返回给调用者的值。

TL; DR:我会尝试这样做:

public boolean isExistGuess(int guess, ArrayList<Integer> arraylist) {

    boolean found = false;

    if (!arraylist.isEmpty()) {

        for (int i=0; i < arraylist.size(); i++) {
            found = ((arraylist.get(i).integerValue() == guess));
            if (found) break;
        }
    }

    return found;
}

编辑:我喜欢自己做原语的装箱和拆箱。它助长了我控制一切的错觉。

于 2013-05-03T22:31:03.063 回答
0

问题是您的条件不是常量,因此编译器无法确定该方法是否总是返回某些内容。顺便说一句,更短的等效版本是:

public boolean isExistGuess(int guess, ArrayList<Integer> arraylist) {
    return arraylist.contains(guess);
}
于 2013-05-03T23:17:53.843 回答