2017-04-16 148 views
1

爲什麼以下內容正確且無法正常工作?我想每一個對象應該有不同的名稱:使用循環的具有相同名稱的不同對象

LinearLayout rootView = (LinearLayout)findViewById(R.id.rootView); 


int i = 0; 
while (i<5) { 
    TextView wordView = new TextView(this); 
    wordView.setText(words.get(i)); 
    rootView.addView(wordView); 

    i++; 
} 

但是,如果我試圖做沒有循環:

TextView wordView = new TextView(this); 
wordView.setText(words.get(0)); 
rootView.addView(wordView); 

TextView wordView = new TextView(this); 
wordView.setText(words.get(1)); 
rootView.addView(wordView); 

這是不允許的,所以它是如何在Java工作完全 - 一個循環創建具有相同名稱的不同對象?

謝謝!

+4

這是一個稱爲變量範圍的基本概念。對象也沒有名字。 – Kayaman

+0

我在第一個片段中看不到具有相同名稱的兩個對象。只有我嗎? –

+0

***在問題的第一個片段中沒有「具有相同名稱的不同對象」***。我是唯一一個看到這個的人嗎? –

回答

5

你需要了解的是一個局部變量即塊範圍,每個局部變量的作用域僅限於該塊,並嘗試下面的代碼,它會工作:

{//1st block started 
    TextView wordView = new TextView(this); 
    wordView.setText(words.get(0)); 
    rootView.addView(wordView); 
    //1st block wordView scope ends here 
}//1st block ended 

{//2nd block started 
    TextView wordView = new TextView(this); 
    wordView.setText(words.get(1)); 
    rootView.addView(wordView); 
    //2nd block wordView scope ends here 
}//2nd block ended 

而且,來到while循環,你可以把它想成像上面那樣的5塊(即,每個塊爲每次迭代執行)。

您可以從JLS參考here局部變量的作用域是如何工作的:

每一個局部變量聲明聲明立即被 塊包含。局部變量聲明語句可以自由地與塊中的其他類型的語句混合使用。


此外,在你的那句「每一個對象應該有一個不同的名字」,這應該是像「每個參考變量應該有一個不同的名稱」更有意義(因爲對象被分配只是一個修正並由參考變量指出)。

+0

謝謝!我理解範圍的概念,並且感謝您對每個引用變量的更正應該有不同的名稱, 因此,由於在這種情況下所有對象都具有相同的引用名稱,因此我將無法訪問特定的一個稍後?我的意思是,這個循環只是爲了在屏幕上創建這些視圖,並且我將無法「選擇」任何特定的一個以供後續工作? – Foobarer

-1

這應該引導你,讓你在陣列 得到不同的輸出名稱的基礎,如果你正在尋找同名循環

public static void main(String[] args) { 
 
String option1 = "o1v1,o1v2,o1v3"; 
 
String option2 = "o2v1,o2v2,o2v3"; 
 
String option3 = "o3v1,o3v2,o3v3"; 
 
ArrayList<String> output = new ArrayList<String>(); 
 

 
String[] options1 = option1.split(","); 
 
String[] options2 = option2.split(","); 
 
String[] options3 = option3.split(","); 
 

 
for(int i=0; i<options1.length; i++){ 
 
    StringBuilder sb = new StringBuilder(); 
 
    sb.append(options1[i]); 
 
    sb.append(options2[i]); 
 
    sb.append(options3[i]); 
 
    output.add(sb.toString()); 
 

 

 
} 
 

 
System.out.println(output); 
 

 
}

雖然用逗號這將輸出

+0

這是如何回答這個問題的?實際上,不,讓我換個角度來看:這與問題甚至是遙相關?計數:10 ... 9 ... 8 ... –

+0

基本上我只是想你可以嘗試一個for循環而不是while循環。不是真的有一個具體問題的好剪輯,但我認爲for循環將完成這項工作 –

相關問題