看板 AndroidDev 關於我們 聯絡資訊
先講重點好了,你可以這樣做: // 你的 Array_chess_map 我用 mapList (純粹減少文字長度而已) // chess_map 我用 arr_map int[][] copyOfMap = new int[13][]; for(int x=0;x<arr_map.length;x++){ copyOfMap[x]=arr_map[x].clone(); } mapList.add(copyOfMap); 如同 ssccg 所言,造成這個的原因是 java array 的特性: int[][] a=new int[2][2]; a[0][0]=1; a[0][1]=2; a[1][0]=3; a[1][1]=4; 原理其實是長這個樣子: ┌──────┐ ┌────→│a[0][0] = 1 │ ┌────┐ │ ├──────┤ a ──→ │ a[0] ─┼─┘ │a[0][1] = 2 │ ├────┤ └──────┘ │ a[1] ─┼─┐ └────┘ │ │ │ ┌──────┐ └─→│a[1][0] = 3 │ ├──────┤ │a[1][1] = 4 │ └──────┘ 而非 C 語言中的這樣: ┌──────┐ │a[0][0] = 1 │ ├──────┤ │a[0][1] = 2 │ ├──────┤ │a[1][0] = 3 │ ├──────┤ │a[1][1] = 4 │ └──────┘ 所以當你執行 int[][] b = a.clone 時,他是把 a[0] 和 a[1] 的值 ==> 也就是指向 a[0][0~1] 和 a[1][0~1] 的 reference 複製到 b[0] 和 b[1]: ┌──────┐ ┌────→│a[0][0] = 1 │ ┌────┐ │ ├──────┤ a ──→ │ a[0] ─┼─┘ │a[0][1] = 2 │ ├────┤ └──────┘ │ a[1] ─┼─┐ └────┘ │ │ ┌────┐ │ ┌──────┐ └─┼─ b[0]│←── b └─→│a[1][0] = 3 │ ├────┤ ├──────┤ ←─┼─ b[1]│ │a[1][1] = 4 │ └────┘ └──────┘ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.254.16.222 ※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1442400188.A.698.html ※ 編輯: darkk6 (122.254.16.222), 09/16/2015 18:50:59