【发布时间】:2019-04-21 22:09:08
【问题描述】:
这个程序正在尝试重现康威的生命游戏。
此代码尝试应用的规则:
- 有 3 个邻居的空牢房复活了
- 具有 3 个邻居的活细胞死亡
- 所有出生/死亡同时发生
问题是我的代码在不同的迭代中输出没有变化,即使显然应该有。
对于更新单元格部分中使用的某些逻辑的任何帮助或想法将不胜感激。
我尝试打印出不同的变量和填充的单元格,但一切(在这方面)似乎都正常工作。
为没有更深入而道歉,老实说,我不确定代码的错误是什么。提前感谢您的帮助。
import java.util.*;
import java.io.*;
public class Game_Of_Life {
public static void main(String[] args) throws IOException {
final int runs = 5;
int organisms;
String[][] real = new String[20][20];
String[][] test = new String[20][20];
Scanner reader = new Scanner(new File("life100.txt"));
for(int i = 0; i < real.length; i++) {
for(int g = 0; g < real.length; g++) {
real[i][g] = test[i][g] = " ";
}
}
while(reader.hasNext()) {
real[reader.nextInt()-1][reader.nextInt()-1] = "*";
test[reader.nextInt()-1][reader.nextInt()-1] = "*";
}
reader.close();
for(int j=0; j<runs; j++) {
for(int i = 0; i < real.length; i++) {
for(int g = 0; g < real.length; g++) {
int neigh = neighbors(real, i, g);
if(test[i][g].equals("*")) {
if(neigh<2 || neigh>3) {
real[i][g] = " ";
}
}
else {
if(neigh == 3) {
real[i][g] = "*";
}
}
}
}
for(int i = 0; i < real.length; i++) {
for(int g = 0; g < real.length; g++) {
real[i][g] = test[i][g];
}
}
System.out.println(" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20\n");
for(int i = 0; i < real.length; i++) {
System.out.print((i+1) + " ");
for(int g = 0; g < real.length; g++) {
System.out.print(" " + test[i][g] + " ");
}
System.out.println();
}
}
}
public static boolean able(int row, int col, int N) {
if (row >= 0 && col >= 0 && row < N && col < N) {
return true;
}
else {
return false;
}
}
public static int neighbors(String[][] ray, int row, int col) {
int neighbor=0;
int[] rows = {row-1, row-1, row-1, row, row, row+1, row+1, row+1};
int[] cols = {col-1, col, col+1, col-1, col+1, col-1, col, col+1};
for(int i=0; i<8; i++) {
if(able(rows[i], cols[i], 20) && ray[rows[i]][cols[i]].equals("*")) {
neighbor++;
}
}
return neighbor;
}
}
实际结果:经过我运行的五次迭代后,细胞不会变得活跃或死亡。
【问题讨论】:
-
欢迎来到 SO!
life100.txt中有什么内容? -
它们是游戏开始时活细胞的坐标。我本来会张贴板子的样子,但是当我把它复制过来时,板子的空间都消失了,所以一切都搞砸了。
-
不幸的是,没有它,很难编写一个可验证的解决方案。由于它与您面临的问题无关,因此我建议在读取文件内容后在内存中编写一个等效的数组。这将启用minimal reproducible example 并通过消除猜测和干扰使您的问题易于回答,并使人们更容易运行您的代码。
-
我将努力设置该数组,以便您可以运行代码。感谢您的反馈!