Game Of Life循环错误

时间:2015-01-27 04:06:38

标签: java arrays constructor

所以我目前正在研究一个基于Conway的生命游戏的程序,这个特定的方法要求我更新2d数组来定义哪些单元格还活着。我已经运行了我的JUnit测试,但是当该方法的测试运行时,它表示它无限循环。有什么想法吗?

public void update() {
    boolean temp ;
    for (int i = 0; i < numberOfRows(); i++) {
        for (int j = 0; j < numberOfColumns(); j++) {
            temp = false;
            if (cellAt(i, j)) {
                temp = true;
            }
            if (temp=true) {
                if (neighborCount(i, j) < 2 || neighborCount(i, j) > 3) {
                    society[i][j] = false;
                }
            } else {
                if (neighborCount(i, j) == 3) {
                    society[i][j] = true;
                }
            }
        }
    }
}

以下是此处使用的其他方法

cellAt():

public boolean cellAt(int row, int col) {
    if (society[row][col] == true) {
        return true;
    } else {
        return false;
    }
}

neighborCount():

public int neighborCount(int row, int col) {
    int counter = 0;
    for (int i = ((row + numberOfRows() - 1) % numberOfRows()); i == ((row + 1) % numberOfRows())
            || i == row
            || i == (((row + numberOfRows() - 1)) % numberOfRows())
            || i == numberOfRows(); i++) {
        i = i % numberOfRows();
        for (int j = (((col + numberOfColumns() - 1)) % numberOfColumns()); j == ((col + 1) % numberOfColumns())
                || j == col
                || j == (((col + numberOfColumns() - 1)) % numberOfColumns())
                || j == numberOfColumns(); j++) {
            j = j % numberOfColumns();
            if (society[i][j] == true) {
                counter++;
            }
        }
    }
    return counter;
}

2 个答案:

答案 0 :(得分:3)

您需要在此处使用比较(==)而非分配(=):

        if (temp=true) { 

将始终返回true

将其更改为

        if (temp == true) {

或简单地使用“Jean-FrançoisSavard”建议

if(temp)

答案 1 :(得分:1)

想出来。 neighborCount()只是写得非常糟糕,for循环正在重复。