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

Java二维数组构造矩阵为何触发NullPointerException?

解决Java二维矩阵的NullPointerException问题

嘿,我来帮你搞定这个空指针异常的问题,咱们拆解一下你的代码里的问题:

问题1:二维数组未初始化导致空指针

你声明了int[][] grid;,但在构造方法里直接尝试给grid[i][j]赋值——这时候grid还是null,没有实际创建数组对象,自然会触发NullPointerException。

解决方法很简单:在构造方法的循环前,先初始化二维数组,分配内存空间:

grid = new int[r][c];

问题2:类顶级代码不能直接执行实例化和方法调用

你在GridWorld类的末尾直接写了:

GridWorld grid1 = new GridWorld();
grid1.display();

Java不允许在类的顶级代码块里直接执行这类语句,必须把它们放到方法中,最常用的就是main方法——程序的入口点。

修正后的完整代码

import java.util.concurrent.ThreadLocalRandom;

public class GridWorld {
    // 数据
    int[][] grid; // r行c列的int类型网格
    int r; // 行数
    int c; // 列数
    final static int ROW = 4; // 默认行数
    final static int COL = 4; // 默认列数

    // 构造方法
    // 1. 默认构造方法:构造4x4的int类型网格
    // 第i行第j列的元素值为4*i+j+1
    public GridWorld() {
        r = 4;
        c = 4;
        // 初始化二维数组,分配内存
        grid = new int[r][c];
        for (int i = 0; i < r; i++) {
            for (int j = 0; j < c; j++) {
                grid[i][j] = 4 * i + j + 1;
            }
        }
    }

    public void display() {
        System.out.println("-----------------------------");
        for (int i = 0; i < this.r; i++) {
            for (int j = 0; j < this.c; j++) {
                System.out.print("| " + this.grid[i][j] + " ");
            }
            System.out.println(" |");
            System.out.println("-----------------------------");
        }
    }

    // 新增main方法作为程序入口
    public static void main(String[] args) {
        GridWorld grid1 = new GridWorld();
        grid1.display();
    }
}

额外说明

我还把this.getVal(i,j)改成了this.grid[i][j],因为你的代码里并没有定义getVal方法,这也是潜在的编译错误。如果后续需要封装取值逻辑,再单独实现getVal方法就好。

现在运行这段代码,就能输出你期望的4x4矩阵啦!

内容的提问来源于stack exchange,提问作者new2java

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:53:05