嵌套for循环中的if-else块 - 编译器声明我需要一个return语句

时间:2013-01-25 12:10:18

标签: java boolean

如何使这项工作?它说我需要添加一个return语句,但我有一个。

public boolean clockFactCheck(int a, int b){
    for (int i = 0; i <= 276; i++){
        for (int h = 0; h <= 55; h++){
            if (a == i + 186 && b == h + 133){
                return true;
            } else {
                return false;
            }
        }
    }
}

6 个答案:

答案 0 :(得分:3)

提供的代码可能无法到达任何输入return的{​​{1}}之一,而这正是编译器所抱怨的。

实际上在你的情况下,a,b将在第一次迭代时到达 - 遗憾的是编译器无法推断的东西。因此,它采用保存方式并发出此错误。

评论:因此,在你的循环中似乎没有多大意义,因为它根本不会迭代,而是在第一次迭代if-elsei==0内停止。你是不是想要编写那样的代码?

答案 1 :(得分:0)

在for循环之后你没有return语句,但即使这样,h ++也是死代码,因为它永远不会超过第一次迭代。

答案 2 :(得分:0)

将return语句放在循环外部。 (在函数中声明一个布尔值,修改它并在结尾处返回)

答案 3 :(得分:0)

我的猜测是,编译器不够聪明,无法确定循环周围没有代码路径。

如果这是真正的代码,请将其简化为

return (a == 186 && b == 133);

如果这不是真正的代码,可能还有另一条路径没有返回(如果你做了错误粘贴),或者确实存在编译器错误或限制。有一次,暂停问题会让你感到困惑,而且代码太复杂了,编译器无法弄清楚。

在后一种情况下,我会放置一个

throw new RuntimeException(
   String.format("should never get here (a = %d, b = %d) !",a,b));

在最后一个声明中。

这使得编译器都很高兴,并且没有为一个应该永远不会发生的情况引入“未定义的”返回值,或者如果没有这样做,则没有想到。

答案 4 :(得分:0)

Java要求每个路径都返回一个值。编译器无法判断循环是否会返回路径。如果您的代码是这样的:

public boolean add(){
for(int i=0;i<100;i++)
    if(i==5000)
    return true;}

函数add不会返回值。相反,会发生错误。

答案 5 :(得分:0)

噢,我的坏,我很抱歉这是一个愚蠢的问题,当我发布这个是凌晨5点。我找到了问题的答案。如果你犯了与我相同的愚蠢错误就是修复

public boolean clockFactCheck(int a, int b){
    for (int i = 0; i <= 276; i++){
        for (int h = 0; h <= 55; h++){
            if (a == i + 186 && b == h + 133){
                return true;
            }
        }
    }
    return false;
}