Java 以下代码给出错误的原因

Java 以下代码给出错误的原因,java,arrays,list,Java,Arrays,List,下面的代码给了我一个编译错误。它说我应该在第二个循环中使用它之前在某个地方初始化v,而在第一个循环中,一切似乎都很好。我想它可能会隐式初始化为0。感谢对此的任何反馈。此外,在这种情况下,最佳做法是什么 public static void main(String[] args) { ArrayList<Integer> list=new ArrayList<Integer>(); ArrayList<Integer>[] list2=(Arra

下面的代码给了我一个编译错误。它说我应该在第二个循环中使用它之前在某个地方初始化
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);
}
publicstaticvoidmain(字符串[]args){
ArrayList=新建ArrayList();
ArrayList[]列表2=(ArrayList[])新的ArrayList[10];
用于(INTV:列表)
系统输出打印Ln(v);
for(int v:list2[v])
系统输出打印Ln(v);
}

您声明的第一个“v”仅限于第一个for循环,第二个“v”仅限于第二个for循环,因此您可以使用第二个for循环中的第一个“v”访问第一个“v”

您声明的第一个“v”仅限于第一个for循环,第二个“v”仅限于第二个for循环,因此,您可以在第二个for循环中使用访问第一个“v”

第一个“v”的范围仅限于第一个for循环

因此,在第二个循环中,下标中使用的“v”在第一次使用时没有声明

你希望在第二天做什么?打印列表2中的所有内容?如果是,则需要创建一个嵌套的for循环,如下所示:

for(ArrayList<> innerList : list2)
    for(int i : innerList)
        System.out.println(i);
for(ArrayList innerList:list2)
for(inti:innerList)
系统输出打印LN(i);

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

第一个“v”的范围仅限于第一个for循环

因此,在第二个循环中,下标中使用的“v”在第一次使用时没有声明

你希望在第二天做什么?打印列表2中的所有内容?如果是,则需要创建一个嵌套的for循环,如下所示:

for(ArrayList<> innerList : list2)
    for(int i : innerList)
        System.out.println(i);
for(ArrayList innerList:list2)
for(inti:innerList)
系统输出打印LN(i);

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

您的代码与下面的代码类似

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

您的代码与以下代码类似

//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);
    }
}
请看这篇文章

它说

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

请阅读本文

它说

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