John Conway の Game of Life に基づいたプログラムを書いています。何日もノンストップで作業した後、コンパイルして実行することさえできました。しかし、それが印刷している結果は間違っています...
これは私のコードです(メインメソッドは含まれていません)
//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);
このメソッドは、実際に次世代のシミュレーションを生成します。「現在の」世代として渡される 2 次元配列グリッドを使用する必要があります。「次の」世代を保持する 2 番目の一時的な 2 次元配列を作成する必要があります。次世代をうまく作成するために必要なすべての情報を失う危険性があるため、現在のマトリックスに変更を加えることはできないため、作業するにはこの一時的なマトリックスを作成する必要があります。」
- 一時配列を作成しました
- 現在の配列を一時的にコピーしました
- 命令が言ったように、後で一時を現在の配列にコピーしました。
だから私は何が間違っていたのかよくわかりません。
もうすぐ午前 3 時です。正午から Vim の画面を見つめています。どんな助けでも大いに感謝します。