2017-02-19 3 views
0
그래서 내 질문은

while 루프에서 변수 ... 같은 이름의 원수

변수 이름 '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

이 답변으로 문제가 해결 되었습니까? 그런 다음 upvoting하고 받아들이는 것을 고려하십시오. –

0

변수 워드 뷰의 범위는 여기에 유의해야합니다. 첫 번째 코드에서

  1. 변수 wordView가 당신에게 오류를 제공 같은 블록에서 다시 선언되고있다 :

    다음은 무슨 일이 일어나고있는 것입니다. 한 블록에 같은 이름의 변수를 사용할 수 없습니다.

  2. 두 번째 코드 조각에서 루프 안에 변수가 있습니다. 즉, 변수 wordView는 각 반복 끝에 '새로운 의미'를 갖게됩니다.