Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 康威';s游戏中的生命循环算法_Java_Conways Game Of Life - Fatal编程技术网

Java 康威';s游戏中的生命循环算法

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

代码尚未完成,但我在算法中遇到了一些奇怪的问题。当它循环通过时,它每次都会在同一地点附近5崩溃,除非我把游戏设为3乘3。我不确定这个循环出了什么问题——看起来算法应该可以工作,而且到目前为止它的编程是正确的

    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
等等?我假设您提到的崩溃类似于数组索引越界类型的异常。你能核实一下你到底遇到了什么样的车祸吗?