读取2d数组的问题-Java

读取2d数组的问题-Java,java,arrays,conways-game-of-life,Java,Arrays,Conways Game Of Life,我正在尝试使用2d阵列制作康威的《生命游戏》。此方法应查看2d数组上的每个位置,检查其每个邻居,并计算该位置周围有多少邻居(0为空,1为占用)。然后它执行一些逻辑,并决定该位置是死的还是活的。我遇到的问题是,当它检查第二个位置时,tempMatrix的值是错误的。我特别检查了第一个位置[0][0],它从0变为1,我不知道为什么。提前感谢您的帮助 public static int[][] Evolve(int[][] _array){ inputMatrix = _array;

我正在尝试使用2d阵列制作康威的《生命游戏》。此方法应查看2d数组上的每个位置,检查其每个邻居,并计算该位置周围有多少邻居(0为空,1为占用)。然后它执行一些逻辑,并决定该位置是死的还是活的。我遇到的问题是,当它检查第二个位置时,tempMatrix的值是错误的。我特别检查了第一个位置[0][0],它从0变为1,我不知道为什么。提前感谢您的帮助

public static int[][] Evolve(int[][] _array){
    inputMatrix = _array;
    outputMatrix = inputMatrix;
    int [][] tempMatrix = inputMatrix;
    System.out.println("Output Matrix:");
    for (int x = 0; x < size; x++){
        for (int y = 0; y < size; y++){
            int neighbor_count = 0;
            ArrayList<int[]> neighbors = getNeighbors(x,y);
            for(int[] neighbor: neighbors){
                int tempX = neighbor[0];
                int tempY = neighbor[1];
                int temp = tempMatrix[tempX][tempY];
                if(temp == 1){
                    neighbor_count++;
                }
            }
            if(tempMatrix[x][y] == 1){
                if(neighbor_count == 1 || neighbor_count > 3) {
                    outputMatrix[x][y] = 0;
                }
                else{
                    outputMatrix[x][y] = 1;
                }
            }else if(neighbor_count == 3){
                outputMatrix[x][y] = 1;
            }else{
                outputMatrix[x][y] = 0;
            }
            System.out.printf("%2d ",outputMatrix[x][y]);
        }
        System.out.println();
    }
    return outputMatrix;
}
publicstaticint[]Evolve(int[][]u数组){
输入矩阵=_数组;
outputMatrix=输入矩阵;
int[][]临时矩阵=输入矩阵;
System.out.println(“输出矩阵:”);
用于(int x=0;x3){
输出矩阵[x][y]=0;
}
否则{
输出矩阵[x][y]=1;
}
}else if(邻居计数=3){
输出矩阵[x][y]=1;
}否则{
输出矩阵[x][y]=0;
}
System.out.printf(“%2d”,outputMatrix[x][y]);
}
System.out.println();
}
返回输出矩阵;
}

您的
inputMatrix
outputMatrix
tempMatrix
是指同一个2D数组。 因此,当您使用以下代码修改
输出矩阵时

if(tempMatrix[x][y] == 1){
            if(neighbor_count == 1 || neighbor_count > 3) {
                outputMatrix[x][y] = 0;
            }
            else{
                outputMatrix[x][y] = 1;
            }
        }else if(neighbor_count == 3){
            outputMatrix[x][y] = 1;
        }else{
            outputMatrix[x][y] = 0;
        }
tempMatrix
的值也会更改。 因此,尝试为所有三个矩阵创建新的2D数组,然后复制值

int inputMatrix[][]=new int[dimension][dimension];

现在将
\u数组
矩阵的值复制到
输入矩阵

您的
输入矩阵
输出矩阵
临时矩阵
引用的是同一2D数组。 因此,当您使用以下代码修改
输出矩阵时

if(tempMatrix[x][y] == 1){
            if(neighbor_count == 1 || neighbor_count > 3) {
                outputMatrix[x][y] = 0;
            }
            else{
                outputMatrix[x][y] = 1;
            }
        }else if(neighbor_count == 3){
            outputMatrix[x][y] = 1;
        }else{
            outputMatrix[x][y] = 0;
        }
tempMatrix
的值也会更改。 因此,尝试为所有三个矩阵创建新的2D数组,然后复制值

int inputMatrix[][]=new int[dimension][dimension];

现在将
\u array
矩阵的值复制到
inputMatrix

您的
outputMatrix
tempMatrix
只需指向
inputMatrix
即可。当前只有1个数组,但有3个变量名可用于访问该数组。我猜您的意图是实际复制,但这不会自动发生。另请参见:如果数组的唯一值是0和1,为什么不使用
boolean[][]]
?您的
outputMatrix
tempMatrix
只是指向
inputMatrix
,它们都是一样的。当前只有1个数组,但有3个变量名可用于访问该数组。我猜您的意图是实际复制,但这不会自动发生。另请参见:如果数组的唯一值是0和1,为什么不使用
boolean[][]
?我现在创建两个新数组,并将值从_array复制到每个数组中。我还去掉了输入矩阵,因为它不是必需的,但我仍然遇到同样的问题。我现在创建了两个新数组,并将_数组中的值复制到每个数组中。我还去掉了输入矩阵,因为它不是必需的,但我仍然遇到同样的问题。