24h購物| | PChome| 登入
2012-04-17 19:03:24| 人氣1,886| 回應1 | 上一篇 | 下一篇

[JAVA] foreach 的陷阱

推薦 0 收藏 0 轉貼0 訂閱站台

必須了解 for-each 是無法做修改值的,僅能提供讀的功能。

為什麼有感而發呢 ?
小考出了這麼兩小題。

  • 宣告一個 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

台長: Morris
人氣(1,886) | 回應(1)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: [學習]Java |
此分類下一篇:[JAVA][作業][被拋棄的 Lab5]
此分類上一篇:[JAVA] 上課考的定義

aaa
不小心看到這篇~~好奇研究了一下你的方法

還蠻 tricky 的....

不過這個方法只成立在陣列數值為1~N的情況

一般 foreach 的寫法會提供抓取 index 的方式
但是Java不支援,有可能是因為當初設計只是要用來讀取資料用,而非修改。

查了一下網路上比較推薦的方式是 keep the index
也就是說
int index=0 ;
for(int element : value) {
value[index++] = element*2;
}
2013-03-12 11:07:21
版主回應
是,我的以前做法並不好。
不過這樣的話,也沒有必要寫 foreach 了。
2013-03-12 19:33:28
是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文