Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.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 从ArrayList检索二维数组时出现的问题_Java_Arrays_Arraylist - Fatal编程技术网

Java 从ArrayList检索二维数组时出现的问题

Java 从ArrayList检索二维数组时出现的问题,java,arrays,arraylist,Java,Arrays,Arraylist,我有一个代表迷宫的2D数组,在一个循环中,我正在更新这个数组的状态。每次更新之后,我都会将2D数组添加到ArrayList中。我的问题是,当我尝试访问ArrayList中的任何状态时,它总是给出2D数组的最终状态。当我对2D数组进行更改时,我是否也对ArrayList中存储的所有以前的状态进行了更改?正如您所发现的,编辑2D数组将修改您放入ArrayList中的状态 若要停止此操作,请尝试添加带有数据副本的临时二维阵列 List<int[][]> list; int[][] maze

我有一个代表迷宫的2D数组,在一个循环中,我正在更新这个数组的状态。每次更新之后,我都会将2D数组添加到ArrayList中。我的问题是,当我尝试访问ArrayList中的任何状态时,它总是给出2D数组的最终状态。当我对2D数组进行更改时,我是否也对ArrayList中存储的所有以前的状态进行了更改?

正如您所发现的,编辑2D数组将修改您放入ArrayList中的状态

若要停止此操作,请尝试添加带有数据副本的临时二维阵列

List<int[][]> list;
int[][] maze;
int[][] temp = new int[maze.length][];
for(int i = 0; i < maze.length; i++)
{
    temp[i] = new int[maze[i].length];
    System.arraycopy(maze[i], 0, temp[i], 0, maze[i].length);
}
list.add(temp);
列表;
int[][]迷宫;
int[][]temp=新int[maze.length][];
对于(int i=0;i
这可以作为一个方法添加,包括要追加的2D数组和要追加的列表

private void append(int[][] maze, List<int[][]> list)
{
    //the above code
}
private void append(int[]maze,List)
{
//上述代码
}

请注意,如果迷宫是一个二维对象数组,您可能也需要克隆它们(int/double/boolean/String等原语/不可变项也可以)

“当我更改二维数组时,是否也更改了ArrayList中存储的所有以前的状态?”-是的,谢谢,这很有道理。为解决方案添加一个答案非常感谢,我将尝试按照这些思路实现一些东西!