Java-用相同的变量创建两个不同的矩阵



我目前正在使用Netbeans IDE开发Conway的Game of Life,我想将单元格存储在矩阵中。对于进入下一代单元格的操作,我将返回一个新的单元格矩阵,该矩阵是根据输入矩阵计算的。

代码如下:

public static Cell[][] nextGen(Cell[][] CellList)
{ 
Cell[][] Copy = CellList.clone();

for (int i = 0; i<Copy.length; i++)
{
for(int n = 0; n<Copy[i].length; n++)
{
if (Copy[i][n].isAlive())
{
if (Cell.count(Copy, i, n) <= 1 || Cell.count(Copy, i, n) >= 4 )
{
CellList[i][n].kill();
}
}else
{
if (Cell.count(Copy, i, n) == 3)
{
CellList[i][n].born();
}
}
}
}

return CellList;
}

该类被称为";Cell";它具有私有布尔属性";"活着";其可以用公共方法CCD_ 1设置为假或用公共方法CCD_。除了计数特定细胞周围的活细胞的方法和计算新一代细胞的方法之外,其他一切都是非平稳的。

为什么它不起作用的问题是,如果我对输入矩阵进行任何更改;CellList";,同样的事情发生在这个矩阵的副本中。

如何让副本具有相同的值,但只对输入矩阵进行更改?谢谢你的帮助!

您正在做的是浅层复制,您需要的是深度复制。试试这个

public class Cell {
boolean alive = false;
protected Cell clone() {
return new Cell(this);
}
public Cell() {
}
public Cell(Cell cell) {
this.alive = cell.alive;
}
boolean isAlive() {
return alive;
}
void kill() {
alive = false;
}
void born() {
alive = true;
}
static int count(Cell[][] cell, int j, int k) {
return 1;
}
public static void main(String[] args) {
Cell[][] CellList = new Cell[2][3];
CellList[0][1] = new Cell();
nextGen(CellList);
}
public static Cell[][] nextGen(Cell[][] CellList) {
Cell[][] Copy = deepArrayCopy(CellList);
for (int i = 0; i < Copy.length; i++) {
for (int n = 0; n < Copy[i].length; n++) {
if (Copy[i][n].isAlive()) {
if (Cell.count(Copy, i, n) <= 1 || Cell.count(Copy, i, n) >= 4) {
CellList[i][n].kill();
}
} else {
if (Cell.count(Copy, i, n) == 3) {
CellList[i][n].born();
}
}
}
}
return CellList;
}
public static Cell[][] deepArrayCopy(Cell[][] celllist) {
Cell[][] copy = new Cell[celllist.length][celllist[0].length];
for (int i = 0; i < celllist.length; i++) {
for (int k = 0; k < celllist[i].length; k++) {
if (celllist[i][k] != null)
copy[i][k] = celllist[i][k].clone();
}
}
return copy;
}

}

相关内容

  • 没有找到相关文章

最新更新