gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:25:46 25 4
gpt4 key购买 nike

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

此代码尝试应用的规则:

  • 拥有 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 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;
}

}

实际结果:在我让它运行五次迭代后,细胞不会变得活跃或死亡。

最佳答案

在我看来,您的所有检查都应该针对“test”数组,因此更改为:

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

然后,完成所有检查并完成对“真实”的更改后,将所有内容从“真实”复制回“测试”。

所以改变:

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

致:

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

关于java - 代码的不同迭代之间没有更新(康威的生命游戏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55787202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com