簡體   English   中英

為什么以下代碼給出錯誤

[英]Why the following code gives an error

下面的代碼給了我一個編譯錯誤。 它說我應該在第二個循環中使用它之前在某個地方初始化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);
}

您的第一個“ v”的范圍僅限於第一個for循環。

因此,在第二個循環中,第一次使用下標時不會聲明您在下標中使用的“ v”。

您希望在第二個“ for”中做什么? 打印list2內的所有內容? 如果是,那么您需要制作一個嵌套的for循環,如下所示:

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

請注意,由於list2包含ArrayLists而不是ints,因此您無法像在代碼中那樣進行for(迭代變量不能為int)。

您聲明的第一個“ v”僅限於第一個for循環,而第二個“ v”僅限於第二個for循環,因此您可以在第二個for循環中使用第一個“ v”

您的代碼類似於以下代碼。

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

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

它指出。

在循環內部創建的任何變量都是局部的。 這意味着一旦退出循環,就無法再訪問該變量! 這包括在循環簽名中創建的所有變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM