在康威的生命游戏中使用数组

时间:2013-07-03 21:46:57

标签: java arrays indexing logic 2d

我在我最新的实验室上学了一面墙。我们正在使用数组重新制作Conway的生命游戏,他们希望我们将一个数组作为原始数据,并使更改发生在另一个数组中。

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

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

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]));
    }
}

1 个答案:

答案 0 :(得分:2)

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

board[i][j]

我想象的方式如下:

数组的MIDDLE中的任何随机元素(不在边或角上)都有8个邻居,无论是活着的还是死的。只需要画一个由相同大小的正方形包围的正方形。它有一个左,右,上,下,左上,右上,左下和右下的邻居。

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

那么如何在代码中表示每个元素?会考虑邻居的权利。他和你的阵列在同一个“行”(我们称之为i),但他是右边的一个“列”(j + 1)。因此,他将被表示为

board[i][j + 1]

同样,左边的邻居也是

board[i][j - 1]

这有意义吗?

然后,要完成项目,您只需要确保您正在检查的邻居的元素不在边缘上,如果是:确保不检查超出阵列的边界,或者您将得到一个ArrayIndexOutOfBoundsException。