Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中操作集合_Java_Arrays_Collections_Linked List - Fatal编程技术网

在Java中操作集合

在Java中操作集合,java,arrays,collections,linked-list,Java,Arrays,Collections,Linked List,我是一个编程初学者,一直在做一个关于滑动拼图的家庭作业。下面的函数希望为每个可能的方向操纵板。发生的情况是,在一个目录中更改了s之后,更改的s也将用于下一个目录。而不是使用原来的 public Collection<Configuration> successors() { List<Configuration> succs = new LinkedList<>(); SlidingGame t = new SlidingGame(this.b

我是一个编程初学者,一直在做一个关于滑动拼图的家庭作业。下面的函数希望为每个可能的方向操纵板。发生的情况是,在一个目录中更改了s之后,更改的s也将用于下一个目录。而不是使用原来的

public Collection<Configuration> successors() {
    List<Configuration> succs = new LinkedList<>();
    SlidingGame t = new SlidingGame(this.board);
    for (Direction dir : Direction.values()) {
        if (t.canMove(dir)) {  
            SlidingGame s = new SlidingGame(this.board);
            s.holeX = t.holeX+dir.getDX();
            s.holeY = t.holeY+dir.getDY();
            s.board[t.holeX][t.holeY] = t.board[s.holeX][s.holeY];
            s.board[s.holeX][s.holeY] = HOLE;
            succs.add(s);
        }
    }
    return succs;
}
公共集合继承者(){
列表成功=新建链接列表();
SlidingGame t=新的SlidingGame(此.board);
for(Direction dir:Direction.values()){
如果(t.canMove(dir)){
SlidingGame s=新的SlidingGame(此.board);
s、 holeX=t.holeX+dir.getDX();
s、 holeY=t.holeY+dir.getDY();
s、 董事会[t.holeX][t.holeY]=t.board[s.holeX][s.holeY];
s、 板[s.holeX][s.holeY]=孔;
成功添加;
}
}
返回成功;
}
甚至t变化,我根本不操纵。 这是使用的构造函数:

public SlidingGame(int[][] board){
    this.board = board;
    for(int i = 0; i < N ; i++){
        for(int j = 0 ; j < N; j++){
            if(board[i][j] == HOLE){
                holeX = i;
                holeY = j;
            }
        }
    }
}
public SlidingGame(int[]board){
this.board=董事会;
对于(int i=0;i

我很抱歉问你这个问题,但我已经被困了很长一段时间了。谢谢你的帮助

如果您传递一个引用(即此.board),则将同一(数组)对象共享到SlidingGame类的两个对象中。请参阅java.util.Arrays.copyOf。但要小心:电路板的元素也是数组引用!您的所有SlidingGame对象都访问相同的数组。可能任务(无论最终是什么)可以以更简单的方式完成,而无需为每个移动创建一个新的SlidingGame实例。如何创建一个对象,而不是一个由相同数组创建的对象,但在执行过程中不会被操纵?我用copyOf制作的数组“copy”现在也不需要了。我们必须使用BFS来找到解决方案,因此我认为,将幻灯片游戏堆积在列表上是个好主意?