2014-11-21 140 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。這意味着一旦你退出循環,變量就不能再被訪問了!這包括在循環簽名中創建的所有變量。

相關問題