编译器无法在for方法中找到变量,if / else返回语句

时间:2017-05-21 21:45:14

标签: java for-loop if-statement methods

我有一个方法,它一直给我编译错误。起初我有一个if和else语句的return语句。我无法使用2个返回语句,因此我将其改为现在的状态。

错误消息现在表示它无法找到变量' x'。我将return语句放在上一组{}中,但仍然没有用。因此,我不确定是否必须完全重新设计我的方法,或者这是否是一个简单的解决方法。

public static boolean equalN(int [] holdN){
    for(int i=0;i<=holdN.length;i++){
        int k=1;
        boolean x;
        if(holdN[i]==holdN[k]){
            k++;
            x=true;
        }
        else{
            x=false;
        }
    }
    return x;
}

2 个答案:

答案 0 :(得分:1)

在方法结束时无法返回x的原因是它是在循环内定义的,因此它的范围在您想要返回之前结束。

同样适用于变量k;好消息是你不需要其中任何一个。

  

起初我有if和else语句的return语句。

您可以使用两个return语句:

  • 第一个return语句应位于if内:一旦检测到您的循环正在查找的项目,请返回true
  • 第二个return语句位于循环结束后方法的末尾。达到这一点的唯一方法是循环永远不会从中间返回,这意味着没有找到任何项目。因此,您返回false

答案 1 :(得分:0)

变量范围是你的问题:

.expand-icon

}

要解决编译问题,您应该在for循环上方移动x的声明。

for(int i=0;i<=holdN.length;i++){
    ...
    boolean x;
    // x exists and is valid here
    ...
}

// but x doesn't exist here

return x; // this will fail compilation

}

有关详细说明,请参阅this SO question about variable scoping