2012-04-17 19:03:24Morris
[JAVA] foreach 的陷阱
必須了解 for-each 是無法做修改值的,僅能提供讀的功能。
為什麼有感而發呢 ?
小考出了這麼兩小題。
但是看看下列程式碼, 解答仍是存在的!
public class Test {
public static void main(String[] args) {
int[] value = new int[10];
for(int i = 0; i < value.length; i++) {
value[i] = i+1;
}
for(int i = 0; i < value.length; i++)
System.out.printf(" %d", value[i]);
System.out.println("");
for(int element : value) {
value[element-1] = element*2;
}
for(int i = 0; i < value.length; i++)
System.out.printf(" %d", value[i]);
System.out.println("");
}
}
範例輸出 :
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
為什麼有感而發呢 ?
小考出了這麼兩小題。
- 宣告一個 int 的陣列, 名稱為 value, 元素個數 10 個, 並用 for 迴圈宣告成 1 ~ 10
- 利用 for-each loop 將每個元素值乘兩倍
但是看看下列程式碼, 解答仍是存在的!
public class Test {
public static void main(String[] args) {
int[] value = new int[10];
for(int i = 0; i < value.length; i++) {
value[i] = i+1;
}
for(int i = 0; i < value.length; i++)
System.out.printf(" %d", value[i]);
System.out.println("");
for(int element : value) {
value[element-1] = element*2;
}
for(int i = 0; i < value.length; i++)
System.out.printf(" %d", value[i]);
System.out.println("");
}
}
範例輸出 :
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
上一篇:[JAVA] 上課考的定義
不小心看到這篇~~好奇研究了一下你的方法
還蠻 tricky 的....
不過這個方法只成立在陣列數值為1~N的情況
一般 foreach 的寫法會提供抓取 index 的方式
但是Java不支援,有可能是因為當初設計只是要用來讀取資料用,而非修改。
查了一下網路上比較推薦的方式是 keep the index
也就是說
int index=0 ;
for(int element : value) {
value[index++] = element*2;
}
不過這樣的話,也沒有必要寫 foreach 了。 2013-03-12 19:33:28