作者aynmeow (有P幣的話 可以的喔)
看板AndroidDev
標題[問題] 陣列複製問題
時間Wed Sep 16 16:55:44 2015
最近做了個五子棋的view
下棋跟運算是否勝利都OK 但就是"回到上一步"一直失敗
public class GameView extends View {
//建立13*13棋盤
private int[][] chess_map = new int[13][13];
//建立儲存棋盤的ArrayList
ArrayList<int[][]> Array_chess_map=new ArrayList<int[][]>();
//重寫View的監聽觸摸事件
@Override
public boolean onTouchEvent(MotionEvent event) {
...就是取得觸摸位置後在chess_map放入值 這裡沒問題
然後我將改變後的chess_map.clone() 裝入ArrayList...
int[][] chess_map_temp = chess_map.clone();
Array_chess_map.add(chess_map_temp);
我可以藉由LOG知道每次存進去Array的chess_map_temp的
toString()都是不一樣的
public void setundo() {//毀棋
chess_map_test1=Array_chess_map.get(Array_chess_map.size()-1);
chess_map_test2=Array_chess_map.get(Array_chess_map.size()-2);
chess_map_test3=Array_chess_map.get(Array_chess_map.size()-3);
問題就在這裡 我把
chess_map_test1~3的toString全部印出來
是不同的 如同我所想的一樣照先後存進去
但是chess_map_test1~3所存的值 卻都是一樣的
也就是我最後儲存的chess_map的值 也就是chess_map_test1的值
QQ
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.118.36.138
※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1442393748.A.329.html
→ ssccg: int[][] chess_map_temp = chess_map.clone() 這行 09/16 17:34
→ ssccg: 只是在chess_map_temp(int[]的陣列)中放了三個int[]的參考 09/16 17:36
→ ssccg: 指向chess_map[0]、chess_map[1]... 09/16 17:37
→ ssccg: 要真的複製,要先new一個int[chess_map.length][]的陣列 09/16 17:42
→ ssccg: 然後分別clone chess_map[0]、chess_map[1]...放進去 09/16 17:42
→ ssccg: 第二行打錯,不是三個是chess_map.length個 09/16 17:43
所以要一格一格去掃 然後放進去喔 QQ
※ 編輯: aynmeow (122.118.36.138), 09/16/2015 17:49:31
推 kiwatami: 是的 速度很快啦XD 寫成一個自己的library就很好用 09/20 22:16