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
相关产品推荐
相关产品推荐

