2014-11-21 2 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», которую вы объявили только ограничивается первым для цикла, а второй «v» ограничивается только второй цикл, так что вы можете получить доступ к первому «V» с в второй для цикла

3

Объем вашего первого 'v' ограничен первым циклом.

Итак, во втором цикле «v», который вы используете в индексе, не объявляется, когда он впервые используется.

Что вы ожидаете делать во втором «за»? Печатать все внутри списка2? Если да, то вам необходимо сделать вложенный цикл, как это:

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

Обратите внимание, что, как песни2 содержит ArrayLists и не Интс, то вы не можете сделать для, как вы имели его в коде (итерация переменный не может быть int).

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 (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.

В нем указывается.

Любые переменные, созданные внутри цикла, являются ЛОКАЛЬНЫМИ К ЛОПЕ. Это означает, что после выхода из цикла переменная больше не может быть доступна! Сюда входят любые переменные, созданные в сигнатуре цикла.

Смежные вопросы