当我创建一个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;
}
感谢大家的帮助!问题已经解决了。
答案 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>
,这样您就不需要为每个新位置分配空间。