Java 康威';s游戏中的生命循环算法
代码尚未完成,但我在算法中遇到了一些奇怪的问题。当它循环通过时,它每次都会在同一地点附近5崩溃,除非我把游戏设为3乘3。我不确定这个循环出了什么问题——看起来算法应该可以工作,而且到目前为止它的编程是正确的Java 康威';s游戏中的生命循环算法,java,conways-game-of-life,Java,Conways Game Of Life,代码尚未完成,但我在算法中遇到了一些奇怪的问题。当它循环通过时,它每次都会在同一地点附近5崩溃,除非我把游戏设为3乘3。我不确定这个循环出了什么问题——看起来算法应该可以工作,而且到目前为止它的编程是正确的 package dsa.hw1; import java.util.Random; import java.util.Scanner; public class DSAHW1 { public static void main(String[] arg
package dsa.hw1;
import java.util.Random;
import java.util.Scanner;
public class DSAHW1 {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
System.out.println("what would you like to be the height?");
int height = kb.nextInt();
System.out.println("what would you like to be the width?");
int width = kb.nextInt();
boolean[][] GameBoard = new boolean[height][width];
Random number = new Random();
for(int i =0; i < GameBoard.length; i++){
for(int j = 0; j < GameBoard[i].length; j++){
int theRandomNumber = number.nextInt(2);
System.out.print(theRandomNumber);
if(theRandomNumber == 1){
GameBoard[i][j] = true;
}
else{
GameBoard[i][j] = false;
}
}
}
System.out.println("");
String[][] Display = new String[height][width];
for(int i =0; i < GameBoard.length; i++){
for(int j = 0; j < GameBoard[i].length; j++){
if(GameBoard[i][j]){
Display[i][j] = "*";
}
else{
Display[i][j] = "-";
}
System.out.print(Display[i][j] + " ");
}
System.out.println("");
}
int heightAlg = height -1;
int widthAlg = width - 1;
//algorithm
int neighbors1 = 0, neighbors2 = 0, neighbors3 = 0, neighbors4 = 0, neighbors5 = 0;
int neighbors6 = 0, neighbors7 = 0, neighbors8 = 0, neighbors9 = 0, neighbors10 = 0;
for(int i =0; i < widthAlg; i++){
for(int j = 0; j < heightAlg; j++){
if(i == 0 & j == 0){
if(GameBoard[i][j++]) {neighbors1++;}
if(GameBoard[i++][j]) {neighbors1++;}
if(GameBoard[i++][j++]) {neighbors1++;}
}
else if( i == 0 && j > 0 && j < widthAlg ){
if(GameBoard[i][j--]) {neighbors2++;}
if(GameBoard[i++][j--]) {neighbors2++;}
if(GameBoard[i][j++]) {neighbors2++;}
if(GameBoard[i++][j]) {neighbors2++;}
if(GameBoard[i++][j++]) {neighbors2++;}
}
else if(i == 0 && j == widthAlg){
if(GameBoard[i][j--]) {neighbors3++;}
if(GameBoard[i++][j--]) {neighbors3++;}
if(GameBoard[i++][j]) {neighbors3++;}
}
else if( i > 0 && i < heightAlg && j == 0 ){
if(GameBoard[i--][j]) {neighbors4++;}
if(GameBoard[i][j++]) {neighbors4++;}
if(GameBoard[i--][j++]) {neighbors4++;}
if(GameBoard[i++][j]) {neighbors4++;}
if(GameBoard[i++][j]) {neighbors4++;}
}
else if( i > 0 && i < heightAlg && j > 0 && j < widthAlg ){
if(GameBoard[i--][j--]) {neighbors5++;}
if(GameBoard[i--][j]) {neighbors5++;}
if(GameBoard[i][j++]) {neighbors5++;}
if(GameBoard[i--][j++]) {neighbors5++;}
if(GameBoard[i++][j]) {neighbors5++;}
if(GameBoard[i++][j]) {neighbors5++;}
}
else if( i > 0 && i < heightAlg && j == widthAlg ){
if(GameBoard[i--][j]) {neighbors6++;}
if(GameBoard[i--][j--]) {neighbors6++;}
if(GameBoard[i++][j]) {neighbors6++;}
if(GameBoard[i][j--]) {neighbors6++;}
if(GameBoard[i++][j--]) {neighbors6++;}
}
else if( i==0 && j == heightAlg ){
if(GameBoard[i--][j]) {neighbors7++;}
if(GameBoard[i][j++]) {neighbors7++;}
if(GameBoard[i--][j--]) {neighbors7++;}
}
else if( i == heightAlg && j > 0 && j < widthAlg ){
if(GameBoard[i][j--]) {neighbors8++;}
if(GameBoard[i--][j]) {neighbors8++;}
if(GameBoard[i--][j++]) {neighbors8++;}
if(GameBoard[i--][j]) {neighbors8++;}
if(GameBoard[i][j++]) {neighbors8++;}
}
else if( i == heightAlg && j == widthAlg ){
if(GameBoard[i][j--]) {neighbors9++;}
if(GameBoard[i--][j--]) {neighbors9++;}
if(GameBoard[i--][j]) {neighbors9++;}
}
}
}
}
}
包dsa.hw1;
导入java.util.Random;
导入java.util.Scanner;
公共类DSAHW1{
公共静态void main(字符串[]args){
扫描仪kb=新扫描仪(System.in);
System.out.println(“您希望的高度是多少?”);
int height=kb.nextInt();
System.out.println(“您希望宽度是多少?”);
int width=kb.nextInt();
布尔[][]游戏板=新布尔值[高度][宽度];
随机数=新随机数();
对于(int i=0;i0&&j){neighbors2++;}
if(GameBoard[i++][j-->){neighbors2++;}
if(GameBoard[i][j++]){neighbors2++;}
if(GameBoard[i++][j]){neighbors2++;}
if(GameBoard[i++][j++]{neighbors2++;}
}
else如果(i==0&&j==widthAlg){
if(GameBoard[i][j-->){neighbors3++;}
if(GameBoard[i++][j-->){neighbors3++;}
if(GameBoard[i++][j]){neighbors3++;}
}
else如果(i>0&&i0&&i0&&j[j-->){neighbors5++;}
if(GameBoard[i--][j]){neighbors5++;}
if(GameBoard[i][j++]){neighbors5++;}
if(GameBoard[i--][j++]){neighbors5++;}
if(GameBoard[i++][j]){neighbors5++;}
if(GameBoard[i++][j]){neighbors5++;}
}
else如果(i>0&&i[j-->){neighbors6++;}
if(GameBoard[i++][j]){neighbors6++;}
if(GameBoard[i][j-->){neighbors6++;}
if(GameBoard[i++][j-->){neighbors6++;}
}
else如果(i==0&&j==heightAlg){
if(GameBoard[i--][j]){neighbors7++;}
if(GameBoard[i][j++]){neighbors7++;}
if(GameBoard[i-->[j-->){neighbors7++;}
}
else如果(i==高度和高度>0和高度<宽度){
if(GameBoard[i][j-->){neighbors8++;}
if(GameBoard[i--][j]){neighbors8++;}
if(GameBoard[i--][j++]){neighbors8++;}
if(GameBoard[i--][j]){neighbors8++;}
if(GameBoard[i][j++]){neighbors8++;}
}
如果(i==高度和&j==宽度){
if(GameBoard[i][j-->){neighbors9++;}
if(GameBoard[i-->[j-->){neighbors9++;}
if(GameBoard[i--][j]){neighbors9++;}
}
}
}
}
}
看看这段代码:
if(GameBoard[i--][j--]) {neighbors5++;}
if(GameBoard[i--][j]) {neighbors5++;}
if(GameBoard[i][j++]) {neighbors5++;}
您可以访问(i,j)、(i-1,j-1)、(i-2,j-1)单元格。如果
i==1
它显然会崩溃,因为它试图访问索引为-1
的元素,您确定要更改i
和j
作为检查邻居的一部分吗?我意识到这可能是一个优化问题,但在执行这些语句后,您真的可以控制值是什么吗?例如,您检查I>0
,但然后执行I--
两次,如果从1
开始,那么i
是否有可能成为-1
?您看到的崩溃到底是什么?也许您打算使用i-1
和i+1
等等?我假设您提到的崩溃类似于数组索引越界类型的异常。你能核实一下你到底遇到了什么样的车祸吗?