为什么以下代码会出错

时间:2014-11-21 04:32:47

标签: java arrays list

下面的代码给出了编译错误。它说我应该在第二个循环中使用它之前初始化v,而在第一个循环中,一切似乎都很好。我想也许它会隐含地初始化为0.感谢对此的任何反馈。此外,在这种情况下,最佳做法是什么。

public static void main(String[] args) {
    ArrayList<Integer> list=new ArrayList<Integer>();
    ArrayList<Integer>[] list2=(ArrayList<Integer>[])new ArrayList[10];
   for(int v:list)
        System.out.println(v);

   for(int v:list2[v])
        System.out.println(v);
}

4 个答案:

答案 0 :(得分:3)

第一个'v'的范围仅限于第一个for循环。

所以在第二个循环中,你在下标中使用的'v'在第一次使用时没有被声明。

你希望在第二个'for'中做些什么?打印list2中的所有内容?如果是,那么你需要像这样制作一个嵌套的for循环:

for(ArrayList<> innerList : list2)
    for(int i : innerList)
        System.out.println(i);

请注意,由于list2包含ArrayLists而不是int,因此您不能像在代码中那样执行for(迭代变量不能是int)。

答案 1 :(得分:2)

您声明的第一个'v'仅限于第一个for循环,第二个'v'仅限于第二个for循环,因此您可以在第二个for循环中访问第一个'v' / p>

答案 2 :(得分:1)

您的代码与以下代码类似。

//begin loop 1
for(int v:list){
    System.out.println(v);
}
//end loop 1

//begin loop 2
for(int v:list2[v]){
    System.out.println(v);
}
//end loop 2

这里变量v将丢失给程序,因为它仅限于第一个for循环。 (与方法局部变量相同)

正确的代码是这样的:

for (int v : list) {
    System.out.println(v);

    for (int x : list2[v]) {
        System.out.println(x);
    }
}

答案 3 :(得分:0)

请查看本文http://www.java-made-easy.com/variable-scope.html

它说明了。

在循环内创建的任何变量都是LOCAL TO LOOP。这意味着一旦退出循环,就无法再访问该变量!这包括在循环签名中创建的任何变量。