看板 AndroidDev 關於我們 聯絡資訊
最近做了個五子棋的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