2016-11-22 82 views
-1

我的作业是创建一个(不那么简单)康威的生命游戏娱乐。确切说明:Java二维阵列布尔

  1. 提示用户输入的(I,J)对(两个非负整数)的列表(当负整数读取停止或者i 或j)
  2. 提示用户输入的时间的步数
  3. 初始化基于第(i,j),通过用户
  4. 显示网格的初始状态进入双网格(调用displayGrid()方法)
  5. 对于每个时间步骤,更新网格acc奥尔丁康威的规则(也称updateGrid()方法),并显示网格(也称 displayGrid()法)

我的节目输出已经改变:

Please enter list of (i, j) pairs for populated cells(negative i or j to quit): 
6 4 6 5 6 6 6 7 6 8 
-1 -1 
Enter number of time steps: 
2 
Initial Grid: 






    ###### 



Time step 1 










Time step 2 

我的新问题是什么让我的代码“杀死”了一切?为什么没有任何“真实”?

这里是我的代码:

java.util.Scanner; 

    class P8{ 
    public static void main(String[] args){ 
     Scanner in = new Scanner(System.in); 
     boolean[][] multi = new boolean[10][10]; 
     int i, j, N, x, y, h; 

     for(x=1; x<multi.length; x++){ 
      for(y=1; y<multi.length; y++){ 
      multi[x][y] = false; 
      } 
     } 
     System.out.println("Please enter list of (i, j) pairs for populated cells(negative i or j to quit):"); 

     while(true){ 
      i = in.nextInt(); 
      j = in.nextInt(); 
      if(i <= 0 || j <= 0){ 
      break;} 

      multi[i][j] = true; 
      } 

     System.out.println("Enter number of time steps:"); 
     N = in.nextInt(); 
     System.out.println("Initial Grid: \n"); 
     displayGrid(multi); 
     for(i = 1; i<N+1; i++){ 
      System.out.printf("Time step %d\n", i); 
      updateGrid(multi); 
      displayGrid(multi); 
      System.out.println("\n"); 
     } 
} 

     /****************************************** 
     void updateGrid(boolean mat[][]); updates 
     the 2 dimensional array using Conway's 
     standard rules. Does this by calling 
     "neighbors" function 
     ******************************************/ 
     public static void updateGrid(boolean mat[][]){ 
      boolean[][] temp = new boolean[mat.length][mat.length]; 
      int i, j, row, col, n=0; 

      for(row = 0; row < mat.length; row++){ 
      for(col = 0; col < mat.length; col++){ 
      neighbors(mat, row, col); 

      if(n>=4 || n<=1) 
       mat[row][col] = false; 
      else 
       mat[row][col] = true; 

      } 
      } 
     } 

     /****************************************** 
     void neighbors(boolean mat[][]int row, int col) 
     checks how many "neighbors" are around a given point 
     ******************************************/ 
     public static int neighbors(boolean mat[][], int row, int col){ 
      int N =0; 
      if((row-1 >= 0)&&(col-1 >= 0)) 
       N = mat[row-1][col-1] ? N + 1 : N; 

      if((row >=0)&&(col-1 >= 0)) 
       N = mat[row][col-1] ? N+1 : N; 

      if((row+1 < mat.length)&&(col-1 >= 0)) 
       N = mat[row+1][col-1] ? N+1 : N; 

      if((row+1 < mat.length)&&(col < mat[0].length)) 
       N = mat[row+1][col] ? N+1 : N; 

      if((row+1 < mat.length)&&(col+1 < mat[0].length)) 
       N = mat[row+1][col+1] ? N+1 : N; 

      if((row < mat.length)&&(col+1 < mat[0].length)) 
       N = mat[row][col+1] ? N+1 : N; 

      if((row-1 >= 0)&&(col+1 < mat[0].length)) 
       N = mat[row-1][col+1] ? N+1 : N; 

      if((row-1 >= 0)&&(col < mat[0].length)) 
       N = mat[row-1][col] ? N+1 : N; 

      return N; 
     } 

     /****************************************** 
     void displayGrid(int mat[][]) prints out 
     a two dimensional array 
     ******************************************/ 
     public static void displayGrid(boolean mat[][]){ 
      int x, y; 
      for(x=1; x<mat.length; x++){ 
      for(y = 1; y<mat.length; y++){ 
       if(mat[x][y]) 
        System.out.printf("#"); 
       else 
        System.out.printf(" "); 
      } 
      System.out.println(); 
      } 

     } 
    } 

`

+0

“else if”没有意义。你可以使用'else',因为你只是反转原始条件。 – shmosel

+0

我考虑了您的意见并更新了我的代码。 :D尽管出现了一个新问题,我相信它存在于我的neighbours()函数中,但我似乎无法找到它。 – 54mike

回答

2

我的问题就是在我的代码是多[] []成为所有“真”,因为这是我必须打印的标准“# '

在你的displayGrid方法中。

if(mat[x][y]= true)是一项任务,而不是比较。

使用

if (mat[x][y]) 

代替。

你永远需要编写bool == true(或bool == false),因为你可以将它们更容易写成bool(和!bool) - 后者的形式避免了潜在的错过了的=标志之一,改变的语义表达。

+0

啊,好吧,我可以看到你在看什么。我会改进我的代码。 – 54mike