java—处理数组中的对象时超出边界

lyfkaqu1  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(303)

当我创建一个 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; 
}

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

noj0wjuj

noj0wjuj1#

申报您的 tileArr 但不初始化。

Tile[][] tileArr;

然后在启动之前初始化数组 for 循环中的 initializeArray() (这是假设你 rows 以及 columns 已设置。您也可以添加逻辑来检查这一点)。

tileArr = new Tile[getRows()][getColumns()];
tileArr = new Tile[rows][columns]; //Do this instead if you don't want the print statements to be called
kcrjzv8t

kcrjzv8t2#

正如@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> 类型like LinkedList<Tile> 或者 ArrayList<Tile> 这样你就不需要为每个新职位分配空间。

相关问题