我正在编写一个基于 John Conway 的生命游戏的程序。经过几天的不间断工作,我得到了编译甚至运行。但是,它打印出来的结果是错误的......
这是我的代码(不包括主要方法)
//clears the grid
public static void clearGrid ( boolean[][] grid )
{
for(int row = 0; row < 18; row++){
for(int col = 0; col < 18; col++){
grid[row][col]= false;
}
}
//set all index in array to false
}
//generate the next generation
public static void genNextGrid ( boolean[][] grid )
{
int n; //number of neighbors
boolean[][] TempGrid = grid;// a temporary array
for(int row = 0; row < 18; row++)
{
for(int col = 0; col < 18; col++)
{
TempGrid[row][col] = grid[row][col];
n = countNeighbors(grid, row, col);
if(grid[row][col] == true)
{
if(n != 2 && n != 3)
{
TempGrid[row][col] = false;
}
else
TempGrid[row][col] = true;
}
else
{
if(n == 3)
{
TempGrid[row][col] = true;
}
else
TempGrid[row][col] = false;
}
grid[row][col] = TempGrid[row][col];
}
}
}
//count how many neighbors surrounding any speicific cell
public static int countNeighbors ( final boolean[][] grid, final int row, final int col )
{
int n = 0;
for (int TempRow = row - 1; TempRow <= row + 1; TempRow++)
{
if (TempRow >= 0 && TempRow < 18)
{
for (int TempCol = col - 1; TempCol <= col + 1; TempCol++)
{
if (TempCol >= 0 && TempCol < 18 && (TempRow != row || TempCol != col))
{
if (grid[TempRow][TempCol])
{
n++;
}
}
}
}
}
return n;
}
我很确定问题出现在我的genNextGrid
方法中。
包括作业表
public static void genNextGrid (boolean[][] grid);
这种方法实际上将生成下一代模拟。它应该使用作为“当前”代传递给它的二维数组网格。它应该创建一个第二个临时二维数组来保存“下一代”。您将需要创建这个临时矩阵来使用,因为您无法更改当前矩阵,因为您可能会丢失成功创建下一代所需的所有信息。”
- 我创建了一个临时数组
- 我将当前数组复制到临时数组
- 我后来像指令所说的那样将临时复制回当前数组。
所以我不确定我做错了什么。
快凌晨 3 点了,从中午开始一直盯着我的 Vim 屏幕。任何帮助将不胜感激。