HY,
我对JAVA有点新意,并且遇到了大问题。当我向List<int[]>
添加元素时,结果将是一个具有相同值的List。
为什么JAVA会像这样工作?
以下是代码:
// Global variables
private static int rows = 20;
private static int columns = 30;
private static String[][] labirinth = new String[rows][columns];
private static List<int[]> walls = new ArrayList<int[]>();
// Local variables inside a function
int[] wall = new int[2];
if(row - 1 <= rows && labirinth[row-1][column] == "*")
{
wall[0] = row-1;
wall[1] = column;
walls.add(wall);
}
if(row + 1 <= rows && labirinth[row+1][column] == "*")
{
wall[0] = row+1;
wall[1] = column;
walls.add(wall);
}
if(column - 1 <= columns && labirinth[row][column-1] == "*")
{
wall[0] = row;
wall[1] = column-1;
walls.add(wall);
}
if(column + 1 <= columns && labirinth[row][column+1] == "*")
{
wall[0] = row;
wall[1] = column+1;
walls.add(wall);
}
最后,walls
变量将多次保留wall
的最后结果。
感谢您的帮助!
答案 0 :(得分:4)
您需要知道数组是一个对象。声明变量时,您声明对该数组的引用。
这意味着,您只需引用相同的数组并多次向同一数组添加walls
您应该为walls
答案 1 :(得分:4)
您总是更改同一个对象:
int[] wall = new int[2];
但每次在将新值设置到墙上并将其添加到列表之前,您应该:
wall = new int[2];
如果你不这样做,你每次都会改变相同的墙坐标,最后只有一面墙,它将具有你最后设定的坐标。
// Local variables inside a function
int[] wall = null;
if(row - 1 <= rows && labirinth[row-1][column] == "*")
{
wall = new int[2];
wall[0] = row-1;
wall[1] = column;
walls.add(wall);
}
if(row + 1 <= rows && labirinth[row+1][column] == "*")
{
wall = new int[2];
wall[0] = row+1;
wall[1] = column;
walls.add(wall);
}
...