Java 编译器可以';在带有for、if/else返回语句的方法中找不到变量

Java 编译器可以';在带有for、if/else返回语句的方法中找不到变量,java,for-loop,if-statement,methods,Java,For Loop,If Statement,Methods,我有一个方法,它不断给我编译错误。起初,我有一个if和else语句的返回语句。我无法让它与2个返回语句一起工作,所以我将其更改为现在的状态 错误消息现在表示找不到变量“x”。我将return语句放在前面的{}集合中,但这仍然不起作用。所以我不确定我是否必须完全重新设计我的方法,或者这是一个简单的修复 public static boolean equalN(int [] holdN){ for(int i=0;i<=holdN.length;i++){ int k=

我有一个方法,它不断给我编译错误。起初,我有一个if和else语句的返回语句。我无法让它与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;
}
公共静态布尔等式(int[]holdN){

对于(int i=0;i变量作用域是您的问题:

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

for(int i=0;i无法在方法末尾返回
x
的原因是它是在循环中定义的,因此它的作用域在您想要返回它之前结束

这同样适用于变量
k
;好消息是您不需要它们中的任何一个

起初,我有一个if和else语句的返回语句

您可以使用两个
return
语句使其工作:

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

x
是在for循环中定义的,当您尝试返回它时,它超出了范围。为什么每次在循环中都尝试重新定义变量?您是否知道数组索引从0开始?第一个元素是
holdN[0]
,最后一个元素是
holdN[holdN.length-1]
。您编写它的方式,(1)您正在将数组的每个元素与第二个元素进行比较,这可能是无害的,(2)最后一次通过循环时将检查
holdN[i]
where
i==holdN.length
,由于这超过了数组的最后一个元素,您将得到一个异常,因为没有具有该索引的数组元素。这可能是向后的……她试图做的事情没有得到很好的解释,但我猜如果数组中的所有元素都是基于此,如果检测到与第一个元素不相等的元素,则需要在循环内返回
false
,如果未找到不匹配的元素,则需要在循环末尾返回
true
boolean x;
for(int i=0;i<=holdN.length;i++){
    ...
}
return x;