int generation = 0;
System.out.println("\nGeneration " + generation + ":");
for(int i = 0; i < rowcol; i++) {
if(i > 0) {
System.out.println();
}
for(int j = 0; j < rowcol; j++) {
System.out.print(arr[i][j] + " ");
}
}
boolean run = true;
int copy[][] = arr;
while(run) {
int alive = 0;
for(int i = 0; i < rowcol; i++) {
for(int j = 0; j < rowcol; j++) {
alive = 0;
//top left
if(i-1 > -1 && j-1 > -1) {
if(arr[i-1][j-1] == 1) {
++alive;
}
}
//top
if(i-1 > -1) {
if(arr[i-1][j] == 1) {
++alive;
}
}
//top right wtf
if(i-1 > -1 && j+1 < rowcol) {
if(arr[i-1][j+1] == 1) {
++alive;
}
}
//left
if(j-1 > -1) {
if(arr[i][j-1] == 1) {
++alive;
}
}
//right
if(j+1 < rowcol) {
if(arr[i][j+1] == 1) {
++alive;
}
}
// down left
if(i+1 < rowcol && j-1 > -1) {
if(arr[i+1][j-1] == 1) {
++alive;
}
}
//down
if(i+1 < rowcol) {
if(arr[i+1][j] == 1) {
++alive;
}
}
//down right
if(i+1 < rowcol && j+1 < rowcol) {
if(arr[i+1][j+1] == 1) {
++alive;
}
}
if(arr[i][j] == 1) {
if(alive < 2) {
copy[i][j] = 0;
} else if(alive > 3) {
copy[i][j] = 0;
}
} else if(arr[i][j] == 0 && alive == 3) {
copy[i][j] = 1;
}
}
}
arr = copy;
generation++;
System.out.println("\nGeneration " + generation + ":");
for(int i = 0; i < rowcol; i++) {
if(i > 0) {
System.out.println();
}
for(int j = 0; j < rowcol; j++) {
System.out.print(arr[i][j] + " ");
}
}
}
}
}
这是我的代码,基本上我有一个家庭作业项目,在网格中制作1和0的生活游戏,尽管用户输入很大,但是当我检查周围有多少个单元时遇到了问题活着
输入行数/列数: 3
0,1,1,1,0,0,0,1,0
第0代:
0 1 1
1 0 0
0 1 0
第1代:
0 1 0
1 1 1
1 0 0
这就是我控制台中的内容,但是在使用调试器时中间应该只有三个,中间居中位置的顶部和左侧和右侧,发现在检查中间的中间值时即使它通过了两个if语句,由于某种原因,它的确会将右上角的那个算作活着的,但我不知道为什么,所以活着的变量最终在中间行中间的那个位置变成三个将其更改为一个该代码可能很可怕,顺便说一句,我对这个东西还很陌生。我希望我提供了足够的详细信息,也只是询问您需要了解的其他信息,以帮助其获得极大的赞赏。