Проблема, которая возникла у меня, связана с методом «aliveNextTime».Я включил весь код файла класса, чтобы лучше понять, как это настроить.
Метод aliveNextTime должен подсчитывать количество соседей, которые имеет ячейка, учитывать текущий статус ячейки (живой или несуществующий) и использовать правила игры жизни, чтобы определить, является ли ячейка или нетбудет жив в следующем поколении.Новая клетка рождается, если соседствует с тремя клетками, и клетка умирает, если соседствует с 0,1,4,5,6,7 или 8 соседями.
Я пробовал различные методы.Мой разум тост прямо сейчас, я работаю над этим, кажется, навсегда.
Я пытался использовать индивидуальные операторы if, я пытался использовать индивидуальные циклы for и пробовал что-то вроде всего, но я, скорее всего, упускаю простое решение.
Как вы можете сказать, яЯ относительно новичок в программировании на Java.
package assignment04;
import java.util.ArrayList;
public class Cell {
private boolean alive;
private int myRow;
private int myCol;
private ArrayList<Cell> neighbors;
public Cell(int row, int col) {
alive = false;
myRow = row;
myCol = col;
neighbors = new ArrayList<>();
}
public void populateNeighbors(Cell[][] cells) {
int limitHoriz = cells[0].length;
int limitVert = cells.length;
// above left
if(myRow > 0 && myRow < limitVert-1) {
if(myCol > 0 && myCol < limitHoriz - 1) {
// ADD 8 cells to neighbors
neighbors.add(cells[myRow-1][myCol-1]);
neighbors.add(cells[myRow-1][myCol]);
neighbors.add(cells[myRow-1][myCol+1]);
neighbors.add(cells[myRow][myCol-1]);
neighbors.add(cells[myRow][myCol+1]);
neighbors.add(cells[myRow+1][myCol-1]);
neighbors.add(cells[myRow+1][myCol]);
neighbors.add(cells[myRow+1][myCol+1]);
}
if(myCol == 0) { // left edge not corner
// ADD 5 cells to neighbors
neighbors.add(cells[myRow+1][myCol]);
neighbors.add(cells[myRow-1][myCol]);
neighbors.add(cells[myRow][myCol+1]);
neighbors.add(cells[myRow-1][myCol+1]);
neighbors.add(cells[myRow+1][myCol+1]);
}
if(myCol == limitHoriz - 1) { // right edge not corner
// ADD 5 cells to neighbors
neighbors.add(cells[myRow-1][myCol]);
neighbors.add(cells[myRow+1][myCol]);
neighbors.add(cells[myRow][myCol-1]);
neighbors.add(cells[myRow+1][myCol-1]);
neighbors.add(cells[myRow-1][myCol-1]);
}
}
if(myRow == 0) {
if(myCol > 0 && myCol < limitHoriz - 1) { // top edge not corner
// ADD 5 cells to neighbors
neighbors.add(cells[myRow][myCol-1]);
neighbors.add(cells[myRow+1][myCol-1]);
neighbors.add(cells[myRow+1][myCol]);
neighbors.add(cells[myRow+1][myCol+1]);
neighbors.add(cells[myRow][myCol+1]);
}
if(myCol == 0) { // top left corner
// ADD 3 cells to neighbors
neighbors.add(cells[myRow+1][myCol]);
neighbors.add(cells[myRow+1][myCol+1]);
neighbors.add(cells[myRow][myCol+1]);
}
if(myCol == limitHoriz - 1) { // top right corner
// ADD 3 cells to neighbors
neighbors.add(cells[myRow][myCol-1]);
neighbors.add(cells[myRow+1][myCol-1]);
neighbors.add(cells[myRow+1][myCol]);
}
}
if(myRow == limitVert-1) {
if(myCol > 0 && myCol < limitHoriz - 1) { // bottom edge
// ADD 5 cells to neighbors
neighbors.add(cells[myRow][myCol-1]);
neighbors.add(cells[myRow][myCol+1]);
neighbors.add(cells[myRow-1][myCol+1]);
neighbors.add(cells[myRow-1][myCol]);
neighbors.add(cells[myRow-1][myCol-1]);
}
if(myCol == 0) { // bottom left corner
// ADD 3 cells to neighbors
neighbors.add(cells[myRow-1][myCol]);
neighbors.add(cells[myRow-1][myCol+1]);
neighbors.add(cells[myRow][myCol+1]);
}
if(myCol == limitHoriz - 1) { // bottom right corner
// ADD 3 cells to neighbors
neighbors.add(cells[myRow][myCol-1]);
neighbors.add(cells[myRow-1][myCol-1]);
neighbors.add(cells[myRow-1][myCol]);
}
}
}
public boolean isAlive() {
return alive;
}
public void setAlive(boolean alive) {
this.alive = alive;
}
public boolean aliveNextTime() {
Boolean[][] currentGen = new Boolean[90][90];
int count = 0;
for(int i = myCol-1; i < myCol+1; i++) {
for(int j = myRow-1; j < myRow+1; j++) {
if(i != myCol && j != myRow) {
if(i >= 0 && j >= 0) {
if(currentGen[j][i]) {
count++;
}
}
}
}
}
if(count > 1 && count < 4) {
if(count == 3) {
setAlive(true);
}
return true;
}else {
return false;
}
}
}
Окно отображается с областью ячейки 90x90.Я ожидал, что клетки погибнут и будут созданы новые, но когда я рандомизирую живые клетки и нажимаю «запустить», абсолютно ничего не происходит.Все ячейки остаются неизменными, несмотря на количество соседей.