在Java中操作集合
我是一个编程初学者,一直在做一个关于滑动拼图的家庭作业。下面的函数希望为每个可能的方向操纵板。发生的情况是,在一个目录中更改了s之后,更改的s也将用于下一个目录。而不是使用原来的在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
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来找到解决方案,因此我认为,将幻灯片游戏堆积在列表上是个好主意?