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

我该如何工作? 它说我需要添加一个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; } } } } 

提供的代码可能无法到达任何输入a,breturn之一a,b而这正是编译器所抱怨的。

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

注释:因此,在你的循环中似乎没有多大意义,因为它根本不会迭代,而是在第一次迭代中停止i==0h==0 。 你是不是想要编写类似的代码?

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

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

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

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

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

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

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

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

在最后的声明。

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

哦,是的,我的坏,我很抱歉这是一个愚蠢的问题,当我发布这个是凌晨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; } 

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

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

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