我在我最新的实验室上学了一面墙。我们正在使用数组重新制作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]));
}
}
答案 0 :(得分:2)
理解这个问题的最好方法是从数组中取一个样本元素,让我们称之为
board[i][j]
我想象的方式如下:
数组的MIDDLE中的任何随机元素(不在边或角上)都有8个邻居,无论是活着的还是死的。只需要画一个由相同大小的正方形包围的正方形。它有一个左,右,上,下,左上,右上,左下和右下的邻居。
你的工作只是循环使用这8个元素并检查它们的状态(isAlive()方法是合乎逻辑的。)
那么如何在代码中表示每个元素?会考虑邻居的权利。他和你的阵列在同一个“行”(我们称之为i),但他是右边的一个“列”(j + 1)。因此,他将被表示为
board[i][j + 1]
同样,左边的邻居也是
board[i][j - 1]
这有意义吗?
然后,要完成项目,您只需要确保您正在检查的邻居的元素不在边缘上,如果是:确保不检查超出阵列的边界,或者您将得到一个ArrayIndexOutOfBoundsException。