作者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://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1442393748.A.329.html
1F:→ ssccg: int[][] chess_map_temp = chess_map.clone() 这行 09/16 17:34
2F:→ ssccg: 只是在chess_map_temp(int[]的阵列)中放了三个int[]的参考 09/16 17:36
3F:→ ssccg: 指向chess_map[0]、chess_map[1]... 09/16 17:37
4F:→ ssccg: 要真的复制,要先new一个int[chess_map.length][]的阵列 09/16 17:42
5F:→ ssccg: 然後分别clone chess_map[0]、chess_map[1]...放进去 09/16 17:42
6F:→ ssccg: 第二行打错,不是三个是chess_map.length个 09/16 17:43
所以要一格一格去扫 然後放进去喔 QQ
※ 编辑: aynmeow (122.118.36.138), 09/16/2015 17:49:31
7F:推 kiwatami: 是的 速度很快啦XD 写成一个自己的library就很好用 09/20 22:16