代码的不同迭代之间没有更新(康威的生命游戏)



这个程序试图重现康威的生命游戏。

此代码尝试应用的规则:

  • 有 3 个邻居的空牢房栩栩如生
  • 具有 <2 或>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 20n");
            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;
    }
}

实际结果:在我运行五次迭代后,细胞不会变成活体或死体。

在我看来

,您的所有检查都应该针对"test"数组,因此请更改为:

int neigh = neighbors(test, i, g);

然后,一旦进行了所有检查并完成了对"真实"的更改,将所有内容从"真实"复制回"测试"。

所以改变:

real[i][g] = test[i][g];

自:

test[i][g] = real[i][g];

最新更新