-1

我的最新学校实验室碰了壁。我们正在使用数组重新制作康威的生活游戏,他们希望我们将一个数组作为原始数组,并在另一个数组中进行更改。

我被困在的地方是邻居逻辑!我不太确定语法或实现,以检查邻居或数组中的下一个索引是否存在。

到目前为止,这是我的源代码(由于低代表不得不复制和粘贴)

import java.util.Arrays;

public class life {
    public static void main(String[] args) {
        Game();
    }

    public static void Game() {
        char [][] board; //original board
        board = new char[5][5];

        char [][] boardCopy;
        board = new char [5][6]; // board to use as a replacement.

        for (int i = 0; i < 5; i++) { //loops that makes the original board.
            for (int j = 0 ; j < 5; j++) {
                int x = (int)(Math.random() * 11);
                if (x <= 5) { board[i][j] = 'X'; }
                if(x > 5) { board[i][j] = '.'; }
            }
        }

        printTable(board);
    }

    public static void printTable(char[][] x){
        //prints the arrays in a table. 
        for(int i = 0; i < 5; i++) System.out.println(Arrays.toString(x[i]));
    }
}
4

1 回答 1

2

理解这个问题的最好方法是从你的数组中获取一个样本元素,我们称之为

board[i][j]

我想象的方式如下:

数组中间的任何随机元素(不在边缘或角落)都有 8 个邻居,要么活着,要么死去。想象一个被大小相等的正方形包围的正方形。它在左、右、上、下、左上、右上、左下和右下有一个邻居。

您的工作只是循环浏览这 8 个元素并检查它们的状态(isAlive() 方法是合乎逻辑的)。

那么如何在代码中表示每个元素呢?会考虑右边的邻居。他与您的数组位于同一“行”(我们称其为 i),但他是右侧的一个“列”(j + 1)。因此,他将被表示为

board[i][j + 1]

同样,左边的邻居是

board[i][j - 1]

那有意义吗?

然后要完成项目,您只需要确保您正在检查的邻居的元素不在边缘上,如果是:确保不要检查超出数组的边界,否则您将获得 ArrayIndexOutOfBoundsException .

于 2013-07-03T21:55:09.273 回答