如何使这项工作?它说我需要添加一个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;
}
}
}
}
答案 0 :(得分:3)
提供的代码可能无法到达任何输入return
的{{1}}之一,而这正是编译器所抱怨的。
实际上在你的情况下,a,b
将在第一次迭代时到达 - 遗憾的是编译器无法推断的东西。因此,它采用保存方式并发出此错误。
评论:因此,在你的循环中似乎没有多大意义,因为它根本不会迭代,而是在第一次迭代if-else
和i==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)
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;
}