Как посчитать живых соседей клетки в игре жизни Конвея?

Я реализую игру жизни Конвея. Я прочитал в начальной доске, и теперь мне нужно запрограммировать ее для подсчета живых соседей ячейки.

Некоторые основные правила

Любая живая клетка с менее чем двумя живыми соседями умирает, как если бы это было вызвано недостаточным населением. Любая живая клетка с двумя-тремя живыми соседями живет до следующего поколения. Любая живая ячейка с более чем тремя живыми соседями умирает, как бы от перенаселения. Любая мертвая клетка, имеющая ровно три живых соседа, становится живой клеткой, как бы путем размножения.

Вот код, который у меня уже есть.

ОБНОВЛЕНИЕ: это код изменен после некоторых первоначальных советов.

/**
 * Write your comments here following the javadoc conventions
 */
public static int countNeighbours(boolean[][] board, int row, int col)
{
    int neighbours = 0; 
    int x = -1;
    while (x <= 1) {
        int y = -1;
        while (y <= 1) {
            if (board[row][col] == true) {

                neighbours++; 
            }
            // Given a 2D boolan array and a cell location given by its
            // row and column indecies, count the number of live cells
            // immediately surrounding the given cell. Remember that you
            // mustn't count the cell itself.

        }


    }
    return neighbours;
}

Это на правильном пути?


person user1605782    schedule 19.09.2012    source источник
comment
docs.oracle.com/javase/tutorial Это должно помочь вам...   -  person tu_ru    schedule 19.09.2012
comment
См. также этот ответ.   -  person Andrew Thompson    schedule 19.09.2012
comment
Одно дело — помочь с ошибкой, другое — дать вам код, чтобы вы могли пропустить обучение (это причина упражнения, вашему профессору действительно не нужно 100 копий этой программы каждый год).   -  person SJuan76    schedule 19.09.2012
comment
@ SJuan76 Я не понимаю проблемы? Никто не дал мне код? Мне просто указали в правильном направлении, а затем я ушел и понял это. И один из лучших способов научиться — обратиться за советом к более опытным программистам. Не все из нас являются экспертами в Java.   -  person user1605782    schedule 19.09.2012
comment
Пожалуйста, примите один из ответов в качестве ответа на ваш вопрос и проголосуйте, если он вам поможет. Это меньшее, что вы можете сделать, когда кто-то тратит время на то, чтобы помочь вам. Вы задали шесть вопросов и получили ответы на все из них, но так и не приняли ни один из них.   -  person MarchingHome    schedule 22.10.2012


Ответы (3)


Я думаю, ты хочешь сделать

if (board[row][col] == true) {

Что то же самое, что

if (board[row][col]) {
person SJuan76    schedule 19.09.2012

Поскольку я знаю, что это типичное школьное задание, я хочу дать вам полный ответ, но вы не должны переопределять строку в начале метода, называть ее как-то иначе, а циклы должны идти от row-1 до row+1 и от col-1 до col+1.

person Ulrik    schedule 19.09.2012
comment
Спасибо за совет. Это лучше? Я обновил ответ. - person user1605782; 19.09.2012

Если вы можете сделать свою доску глобальной, это может работать для одной ячейки с переносом:

public Cell[] getNeighbours(int i, int j) {
int i2 = i - 1, i3 = i + 1, j2 = j - 1, j3 = j + 1;
if (i2 == -1) i2 = board.length - 1;
if (i3 == (board.length)) i3 = 0;
if (j2 == -1) j2 = board[i].length - 1;
if (j3 == (board[i].length)) j3 = 0;
return new Cell[]{board[i2][j2], board[i2][j], board[i2][j3], board[i][j2], board[i][j3], board[i3][j2], board[i3][j], board[i3][j3]};

}

Затем просто подсчитайте, сколько из этих ячеек живо, и верните это.

person Tamoghna Chowdhury    schedule 29.01.2015