Эта программа пытается воссоздать игру жизни Конвея.
Правила, которые этот код пытается применить:
- Оживают пустые ячейки с 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;
}
}
Фактические результаты: Клетки не становятся живыми или мертвыми после пяти итераций, которые у меня запущены.