初始化2维对象数组时的ArrayIndexOutOfBoundsException

我有一个非常简单的问题,但我无法弄清楚为什么我有这个例外。 我正在尝试为数独谜题创建一个二维数组对象,但是当我初始化时,我得到的是ArrayIndexOutOfBoundsException 。 请帮助,我已经阅读了类似的问题,它应该工作!

这里我要声明网格(使用的二维对象数组和构造函数):

  public class Sudoku extends javax.swing.JFrame { private int lines; Cell[][] grid; public Sudoku() { initComponents(); grid = new Cell[lines][lines]; 

所以,当我按下按钮设置线条(尺寸长度)时,如下所示

  private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { lines=10; makeGrid(lines); } 

我得到了例外:

 Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 at Sudoku.makeGrid(Sudoku.java:146) public void makeGrid(int size) { for(int i=0;i<size;i++) for(int j=0;j<size;j++) { 146: grid[i][j] = new Cell(); } } 

您应该将网格初始化移动到make网格方法中,因为在构造函数中,成员lines仍未使用所需的值进行初始化(默认值int为0,因此您获得一个空数组,然后尝试使用更大的未分配边界访问它)

 public void makeGrid(int size) { this.lines = size; // If you do not need lines anywhere else then it is redundant grid = new Cell[size][size]; for(int i=0;i 

问题是int的默认值是0。

所以当你创建你的Sudoku对象时, grid = new Cell[lines][lines]; 相当于grid = new Cell[0][0];

更改makeGrid方法或在构造函数中提供大小。

 public void makeGrid(int size) { this.lines = size; grid = new Cell[size][size]; for(int i=0;i 

grid = new Cell[lines][lines]; 创建一个size [0][0]的数组,因为在运行该语句时, lines仍为0

稍后对lines进行的Whavetever更改不会影响数组大小,这将保持[0][0]

更简单的例子:

 int size = 0; Object[] array = new Object[size]; size = 1; System.out.println(array.length); //prints 0, not 1 

在创建数组之前初始化lines 。 现在您创建具有0x0维度的数组,因为lines是0是默认值。

 lines = 10; // Add this line grid = new Cell[lines][lines];