1

我该如何进行这项工作?它说我需要添加一个退货声明,但我有一个。

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;
            }
        }
    }
}
4

6 回答 6

3

return对于任何输入,提供的代码可能无法到达其中一个,a,b这就是编译器所抱怨的。

实际上,在您的情况下,if-else第一次迭代就会达到 - 不幸的是编译器无法推断出一些东西。因此,它采用保存方式并发出此错误。

评论:因此,在您的循环中似乎没有多大意义,因为它根本不会迭代,而是在第一次迭代中停止,i==0并且h==0. 你的意思是编写这样的代码吗?

于 2013-01-25T12:12:06.160 回答
0

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

于 2013-01-25T12:11:47.407 回答
0

将 return 语句放在循环之外。(在你的函数中声明一个布尔值,修改它并在最后返回它)

于 2013-01-25T12:13:14.460 回答
0

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

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

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

如果这不是真正的代码,则可能存在另一个不返回的路径(如果粘贴时出错),或者确实存在编译器错误或限制。在某一时刻,停止问题困扰着您,而且代码太复杂,编译器无法理解。

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

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

在最后的声明中。

这使编译器感到高兴,并且不会为不应该发生的情况引入“未定义”返回值,或者如果确实发生了,则没有考虑过。

于 2013-01-25T12:17:16.870 回答
0

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

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

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

于 2013-01-25T12:41:59.773 回答
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;
}
于 2013-01-25T20:43:07.260 回答