2014-11-21 121 views
0

下面的代码给了我一个编译错误。它说我应该在第二个循环中使用它之前在某个地方初始化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); 
} 

回答

2

您已声明的第一个“V”只限于第一个for循环,第二个“V”仅限于第二个for循环,这样你就可以在访问第一个“V”第二个循环

3

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

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

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

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

注意,如列表2包含的ArrayList,而不是整数,那么你就不能为你在你的代码有它做(的迭代变量不能是一个整数)。

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); 
    } 
} 
0

有看看这篇文章http://www.java-made-easy.com/variable-scope.html

它声明。

任何在循环内创建的变量都是LOCAL TO LOOP。这意味着一旦你退出循环,变量就不能再被访问了!这包括在循环签名中创建的所有变量。

相关问题