2017-02-19 2 views
0

Так что мой вопрос ...Одинаковые имя FOE переменные в цикле в то время как

Почему следующий код жалуются на имя переменной «wordView» инициализации более чем один раз ..

int index = 0; 
    TextView wordView = new TextView(this); 
    wordView.setText(words.get(index)); 
    rootview.addView(wordView); 

    index++; 
    TextView wordView = new TextView(this); 
    wordView.setText(words.get(index)); 
    rootview.addView(wordView); 

    index++; 
    TextView wordView = new TextView(this); 
    wordView.setText(words.get(index)); 
    rootview.addView(wordView); 

но этого кода нет?

int index = 0; 
while(index<words.size()){ 
    TextView wordView = new TextView(this); 
    wordView.setText(words.get(index)); 
    rootview.addView(wordView); 
    index++; 
} 

это делается то же самое прямо?

+0

Читайте на "Области переменных". Во втором случае wordView выходит за пределы области действия в конце каждой итерации цикла. Новая переменная с тем же именем возвращается в область действия, когда цикл продвигается. В предыдущем примере wordView никогда не выходит за рамки, прежде чем пытаться инициализировать его снова. – Jameson

ответ

1

Причина проста.

В первом фрагменте кода все три переменные определены в том же блоке и, следовательно, в той же области действия, которая недопустима. В блоке или области действия вы можете только один раз определить переменную.

Но во втором фрагменте кода вы только определили переменную один раз в этом блоке цикла или область. После одиночной итерации цикла завершается область действия переменной и время жизни переменной. Когда начинается новая итерация, инициализируется полностью новая переменная.

Это все о сфере действия переменной. Вы не должны думать, что цикл означает, что код внутри блока будет скопирован несколько раз. С каждой итерацией цикла объем переменных в блоке заканчивается и начинается новая область.

+0

Решена ли ваша проблема с этим ответом? Тогда, пожалуйста, подумайте о том, чтобы выжить и принять его. –

0

Сфера применения переменной wordView - вот что следует отметить здесь.

Ниже то, что происходит:

  1. В первом фрагменте кода переменная wordView в настоящее время повторно объявлены в том же блоке, который дает вам ошибку. Вы не можете иметь переменную с тем же именем в блоке.
  2. Во втором фрагменте кода у вас есть переменная внутри цикла. Это означает, что переменная wordView получает «новое значение» в конце каждой итерации.
Смежные вопросы