下面的代码给出了编译错误。它说我应该在第二个循环中使用它之前初始化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);
}
答案 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。这意味着一旦退出循环,就无法再访问该变量!这包括在循环签名中创建的任何变量。