初始化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];