" ...无法解析变量。"为什么不?

时间:2016-02-25 14:50:34

标签: java

public int getEntityIndex(String name){ 
    for(int i = 0; i < entities.length; i++){
        if(entities[i].getName().toUpperCase().equals(name.toUpperCase())){
            break;
        }
    }

    return i;
}

此代码产生错误:i无法解析为变量。我猜测在for循环声明中声明的变量超出了方法其余部分的范围,但我无法找到有关此问题的任何信息。

在分析了一段时间之后,我开始看到使用它是一个坏主意(如果entities[i]永远不等于name该怎么办?该方法将返回entities.length - 1,甚至如果找不到匹配项,我认为我会使用while(!found)方法。

澄清一点,我不是在问如何解决这个问题。我问为什么会出现这种错误。

谢谢!

8 个答案:

答案 0 :(得分:1)

您无法在i循环之外看到for

试试这个:

public int getEntityIndex(String name) { 
    for(int i = 0; i < entities.length; i++){
        if(entities[i].getName().toUpperCase().equals(name.toUpperCase())){
            return i;
        }
    }

    return -1;
}

PS:你也可以使用

entities[i].getName().equalsIgnoreCase(name)

而不是

entities[i].getName().toUpperCase().equals(name.toUpperCase())

答案 1 :(得分:0)

for i的范围是for循环:i只有存在在for循环中。

因此,i不能在其之外使用。

答案 2 :(得分:0)

i仅在for循环中的范围内。除非通过在循环外定义i或将其分配给循环外的另一个变量来显式扩展范围,否则不能在外部使用它。

请记住,变量的范围仅在 的块中定义。您尝试返回i,但在循环外不存在i

答案 3 :(得分:0)

在最后一行中,您返回i。但是,变量i是在for循环的范围内创建的,并且在您尝试返回它的for循环之外不存在。

您可以在for循环中返回i,而不是“break”。你需要在最后返回别的东西。

您还可以在for循环之外初始化i

答案 4 :(得分:0)

ifor循环内声明,它的范围仅在循环内。你无法退货,因为它超出了范围。

答案 5 :(得分:0)

循环,一切都很好,但

return i;

..我作为一个变量一旦离开循环就会消失,所以编译器实际上并不知道要返回什么。这是您的错误消息

答案 6 :(得分:0)

您可以使用其他变量返回de值。

public int getEntityIndex(String name){ 
int j = 0;
    for(int i = 0; i < entities.length; i++){
        if(entities[i].getName().toUpperCase().equals(name.toUpperCase())){
            break;
        }
    j++;
    }

return j;}

答案 7 :(得分:0)

public int getEntityIndex(String name){ 
    for(int i = 0; i < entities.length; i++){
        if(entities[i].getName().toUpperCase().equals(name.toUpperCase())){
            return i; // If found return [i]
        }
    }
    return -1; //[i] was not found and return = -1;
}