You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现生命游戏时全局矩阵读取邻居值始终为false的问题求助

Java实现生命游戏时全局矩阵读取邻居值始终为false的问题求助

我正在用Java写一个生命游戏,用布尔矩阵来表示网格,但读取某个点的所有邻居时,返回的附近位置值总是false,有没有人能帮我找找原因?我的思路是用if语句来统计存活邻居的数量,再用这个计数器来更新矩阵。


首先是create方法,用来初始化一些变量和网格实例:

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

接下来是初始化初始场景的方法,我在这里先把网格所有元素设为false,然后创建了一个滑翔机(glider),所以矩阵里肯定存在true值:

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;
        
    }

但问题出在下面这个统计邻居的geraGrade方法里——不管怎么读,矩阵返回的都是false,导致somaVivos的结果一直不对:

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);
    }

(注:程序运行时能看到滑翔机的图形,但统计邻居时就是读不到true值)

备注:内容来源于stack exchange,提问作者João Pedro Lopes Campos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 10:55:30