Java 编译器可以';在带有for、if/else返回语句的方法中找不到变量
我有一个方法,它不断给我编译错误。起初,我有一个if和else语句的返回语句。我无法让它与2个返回语句一起工作,所以我将其更改为现在的状态 错误消息现在表示找不到变量“x”。我将return语句放在前面的{}集合中,但这仍然不起作用。所以我不确定我是否必须完全重新设计我的方法,或者这是一个简单的修复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=
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]
wherei==holdN.length
,由于这超过了数组的最后一个元素,您将得到一个异常,因为没有具有该索引的数组元素。这可能是向后的……她试图做的事情没有得到很好的解释,但我猜如果数组中的所有元素都是基于此,如果检测到与第一个元素不相等的元素,则需要在循环内返回false
,如果未找到不匹配的元素,则需要在循环末尾返回true
。
boolean x;
for(int i=0;i<=holdN.length;i++){
...
}
return x;