2014-10-26 32 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()); 
}