我使用了clone,但原始数组仍然受到影响

时间:2011-11-27 17:50:26

标签: java

我正在尝试用Java编写一个3x3方移拼图解算器。但是,我被困在我移动块的部分 - 我一直在用我正在使用的算法结束一堆新的空白空间。经过一些测试后,我确定这是因为,尽管我使用了clone()命令,但当我更改“current”时,v的数组仍然受到影响。有谁知道这是为什么以及如何解决它?我认为在使用clone之后,我可以更改新数组而不会影响旧数组。

    if (!rightwall)
    {
        int[][] current = v.state.clone();
        current[x][y] = current[x][y + 1];
        current[x][y + 1] = 0;
        State w = new State(current);
        w.distance = v.distance + 1;
        w.path = v;
        System.out.println("Right Shift:");
        w.print();
        q.insert(w);
    }

State是一个表示二维数组的类以及一些属性 - State的代码的第一部分是

public class State {
int[][] state = new int[3][3];
int distance = 0;
boolean known = false;
State path = null;
State(int[][] newstate){
    state = newstate.clone();
}

v是表示当前位置的状态。然后,w将是在将空白空间与其旁边的空间切换之后创建的“相邻”位置。

q是一个队列。

1 个答案:

答案 0 :(得分:8)

在State类中,您需要确保深度复制所有属性。