全局矩阵读取时未返回正确的值

问题描述 投票:0回答:1

我正在尝试使用布尔矩阵在java中制作一个生命游戏,但是当我尝试读取一个点的所有邻居时,由于某种原因,附近位置的返回总是错误的......有任何线索吗?我的想法是使用 if 表达式来增加计数器并使用它来更新矩阵。

public void create() {
        
        setDefaultFontSize( 20 );
        
        grade = new boolean[DIMENSAO_GRADE][DIMENSAO_GRADE];
        tempoAtualizacao = 0.4;
        mostrarAjuda = true;
        
        prepararCenarioInicial();
        
    }

这部分是创建一些变量和成绩实例的函数


private void prepararCenarioInicial() {
        
        executando = false;
        
        for ( int i = 0; i < DIMENSAO_GRADE; i++ ) {
            for ( int j = 0; j < DIMENSAO_GRADE; j++ ) {
                grade[i][j] = false;
            }
        }
        
        int iIni = DIMENSAO_GRADE / 2 + 2;
        int jIni = DIMENSAO_GRADE / 2;
        
        // glider
        grade[iIni][jIni] = true;
        grade[iIni+1][jIni+1] = true;
        grade[iIni+2][jIni-1] = true;
        grade[iIni+2][jIni] = true;
        grade[iIni+2][jIni+1] = true;
        
    }

我还创建了一个滑翔机,这意味着矩阵中有真实值

private void geraGrade(int i, int j){
        int somaVivos = 0;
        int ni, nj;
        for(int x = - 1; x <= 1; x++){
            for(int y = - 1; y <= 1; y++){
                ni = x + i;
                nj = y + j;
                if((ni <= 0 || nj <= 0) || (ni > DIMENSAO_GRADE - 1 || nj > DIMENSAO_GRADE - 1))continue;
                
                if(grade[ni][nj] == true && !(x == 0 && y == 0)){
                    somaVivos++;
                }
            }
        }
        
        System.out.println(somaVivos);
    }

但是在该代码块中矩阵总是返回 false

这是正在运行的程序

抱歉我的英语不好,这里是巴西语

java matrix boolean conways-game-of-life
1个回答
0
投票

如果将以下部分添加到代码中,您将看到错误所在:

private void geraGrade( int i, int j ) {
   int somaVivos = 0;
   int ni, nj;
   for( int x = - 1; x <= 1; x ++ ) {
      for( int y = - 1; y <= 1; y ++ ) {
         ni = x + i;
         nj = y + j;
         if( ( ni <= 0 || nj <= 0 ) || ( ni > DIMENSAO_GRADE - 1 || nj > DIMENSAO_GRADE - 1 ) )
            continue;
         System.out.println( ni +" " + nj );
         if( grade[ni][nj] == true &&  ! ( x == 0 && y == 0 ) ) {
            somaVivos ++;
         }
      }
   }
   System.out.println( somaVivos );
   printA();
   printB();
}

void printA() {
   for( int i = 0; i < grade.length; i ++ ) {
      for( int j = 0; j < grade.length; j ++ ) {
         if( grade[ i ][j ]) System.out.print( "T" );
         else System.out.print( "." );            
      }
      System.out.println( "" );         
   }
}

void printB() {
   int ni, nj, i = 0, j = 0;
   for( int x = - 1; x <= 1; x ++ ) {
      for( int y = - 1; y <= 1; y ++ ) {
         ni = x + i;
         nj = y + j;            
         if( ( ni <= 0 || nj <= 0 ) || ( ni > DIMENSAO_GRADE - 1 || nj > DIMENSAO_GRADE - 1 ) )
            continue;           
         if( grade[ni][nj]  )   System.out.println( "T" );
         else  System.out.println( "." );
      }
   }
}

printA()方法,绘制棋盘图形,显示“T”,其中有true,以及“.”,其中有false,所以你会查看您放置 true 的位置。
printB()方法显示了geraGrade()遍历的项目...无(使用作为参数“0, 0”)...我认为你应该重写这个方法,或者详细解释你需要什么一起做,一起工作。

© www.soinside.com 2019 - 2024. All rights reserved.