使用数组中的对象时OutOfBounds

时间:2015-10-16 14:48:02

标签: java arrays oop

当我创建一个Example个对象的数组时,我调用类似initializeArray();的东西我使用一个简单的嵌套for循环来遍历数组,然后为每个索引分配带有值的新对象使用exampleArr[i][j] = new Example(false, false, false, 0);的数组但是,调用它会在上面的行中给我一个java.lang.ArrayIndexOutofBoundsException:0

我假设我正在错误地实例化新对象,因为这也发生在另一个应该显示数组中所有Example个对象的方法中。但是,我会发布我正在使用的嵌套循环,以防有些东西我做错了,我看不到。

public void initializeArray(){
    for(int i = 0; i < getRows(); i++){
        for(int j = 0; j < getColumns(); j++){
             tileArr[i][j] = new Tile(false, false, false, 0);
        }
    }
}

//行和列的声明

    private int rows; 
    private int columns; 
    Tile[][] tileArr = new Tile[rows][columns]; 
public void setRows(int r)
{   
 rows = r; 
} 
 public void setColumns(int c)
 { 
     //various setters and getters for the array 
  columns = c; 
 } 
public int getRows()
{ 

  System.out.print(rows); 
  return rows; 
} 
public int getColumns()
{ 
  System.out.print(columns); 
  return columns; 
} 

感谢大家的帮助!问题已经解决了。

2 个答案:

答案 0 :(得分:2)

在顶部声明您的tileArr,但不要初始化。

Tile[][] tileArr; 

然后在for的{​​{1}}循环之前初始化您的数组(这假设您的initializeArray()rows已设置。您可以添加逻辑来检查这一点)。

columns

答案 1 :(得分:0)

正如@gonzo所说,你必须初始化你的数组,为你将要使用的所有位置分配足够的内存。

Tile[][] tileArr;

public void initializeArray(){
       Tile[][] tileArr = new Tile[getRows()][getColumns()];
       for(int i = 0; i < getRows(); i++){
           for(int j = 0; j < getColumns(); j++){
                tileArr[i][j] = new Tile(false, false, false, 0);
           }
       }
       return titleArr;
}

//...wherever you want it
this.tileArray = this.initializeArray()

但是有些情况下你不知道这个阵列有多大。对于这些情况,您应该使用List<Tile>类型LinkedList<Tile>ArrayList<Tile>,这样您就不需要为每个新位置分配空间。