2014-10-26 61 views
2

使用(element:collection)使用for循環訪問集合時,我對數據所做的更改在循環期間只保留相同。For循環(元素:集合)未進行永久更改

這裏是我的代碼:

String[] names = {"bob", "fred", "marcus", "robert", "jack", "steve", "nathan", "tom", "freddy", "sam"}; 

for(String indexData : names) 
{ 
    indexData = indexData.toUpperCase(); 
    System.out.println(indexData); 
} 

System.out.println("this is word 5 in the array: " + names[4]); 

輸出:

BOB 
FRED 
MARCUS 
ROBERT 
JACK 
STEVE 
NATHAN 
TOM 
FREDDY 
SAM 
this is word 5 in the array: jack 

我的問題是使用這種類型的循環我怎麼做永久性的變化?

+0

需要正常的循環沒有提高循環 – 2014-10-26 16:32:14

回答

0

你不能用增強的loop來做那件事,你需要Traditional for循環。 indexData = indexData.toUpperCase();只改變局部變量indexData。它不會影響你的數組元素。

以下Traditional for loop會改變你的陣列

String[] names = {"bob", "fred", "marcus", "robert", "jack", "steve", "nathan", "tom", "freddy", "sam"}; 


for(int i=0;i<names.length;i++) { 

    names[i]= names[i].toUpperCase(); 
    System.out.println(indexData); 

} 

System.out.println("this is word 5 in the array: " + names[4]); 
+0

好,謝謝不當然,如果這只是暫時的,或者我沒有做正確的事情。 – Nathan 2014-10-26 16:40:32

+0

indexData只是一個局部變量,用於循環臨時創建 – 2014-10-26 16:41:27

+0

@Nathan它沒有。你只是改變本地變量'indexData'數組本身保持不變。 – mwerschy 2014-10-26 16:46:29

3

環路(元素:集合)被稱爲for循環的增強。 ehanced for循環維護一個迭代器,不允許刪除對象,或者明確使用迭代器。

,以達到您想要的效果的方法是通過一個標準的循環:

for(int i=0; i<names.length;i++) 
{ 
    names[i] = names[i].toUpperCase(); 
    System.out.println(names[i]); 
} 
+0

雖然最後一個'indexData'也應該是名字[i]。 – mwerschy 2014-10-26 16:41:21

+0

@mwerschy更新,謝謝! – gudthing 2014-10-26 16:43:24

0

您可以使用ListIterator

String[] names = {"bob", "fred", "marcus", "robert", "jack", "steve", "nathan", "tom", "freddy", "sam"}; 

ListIterator<String> iterator = Arrays.asList(names).listIterator(); 
while (iterator.hasNext()) { 
    String name = iterator.next(); 
    iterator.set(name.toUpperCase()); 
}