Java 使用数组中的对象时超出边界

Java 使用数组中的对象时超出边界,java,arrays,oop,Java,Arrays,Oop,当我创建Example对象数组时,我调用类似initializeArray()的东西I使用一个简单的嵌套for循环遍历数组,然后使用exampleArr[I][j]=new Example(false,false,false,0)为数组的每个索引分配具有值的新对象

当我创建
Example
对象数组时,我调用类似
initializeArray()的东西
I使用一个简单的嵌套for循环遍历数组,然后使用
exampleArr[I][j]=new Example(false,false,false,0)为数组的每个索引分配具有值的新对象java.lang.ArrayIndexOutofBoundsException:0

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

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);
        }
    }
}

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

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

Tile[][] tileArr; 
然后在
initializeArray()
中的
for
循环之前初始化数组(这是假设设置了
。您也可以添加逻辑来检查这一点)


正如@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()
Tile[]tilerar;
公共无效初始值设定项array(){
Tile[][]tilerar=新Tile[getRows()][getColumns()];
对于(int i=0;i

但在某些情况下,您不知道该阵列可能有多大。对于这些情况,您应该使用
List
类型,如
LinkedList
ArrayList
,这样您就不需要为每个新位置分配空间来使用。

tilerar
必须具有兼容的大小,即必须使用类似于
Tile[]tilerar=new tilerar[n][m]的内容来创建它您正在初始化单个元素,但尚未为数组分配内存,或者声明的大小小于您的迭代计数。请发布声明。因为如果我假设您没有分配内存,那么它应该是
NullPointerException
。请通过发布变量声明来清除云。您在哪里调用了行和列的setter?可能重复的抱歉,我应该更清楚,这是我在类顶部的一个实例变量。@Bert您能告诉我们如何在顶部初始化它吗?还请添加getRows()和getColumns的实现()方法,以防它们可能出现问题。
private int rows;private int columns;Tile[]tilerar=new Tile[rows][columns];public void setRows(int r){rows=r;}public void setColumns(int c){//数组列的各种setter和getter=c;}public int getRows(){System.out.print(rows);返回行;}public int getColumns(){System.out.print(列);返回列;}
初始化
tilerar
时,
都是
0
。您可能应该像当前一样在顶部声明
tilerar
,但在设置了
之前不要初始化。如果这是分配内存的问题,不应该这样做吗WNPE@SacJn否,因为他在尝试使用itI之前尝试访问数组中不存在的位置。我尝试运行
int x[]][]=null
的代码NPE@SacJn试试这个
String[]tilerar=newstring[1][1];System.out.println(tilerar[1][2]);
在您的评论中,您确实分配了内存,但内存不足。因此它不会。但是您的声明说您必须初始化数组以为其位置分配空间,这是不明确的。相反,您可以指定它以获得足够的内存。无论如何,只是对单词有误解或遗漏,所以让我们在这里结束
tileArr = new Tile[getRows()][getColumns()];
tileArr = new Tile[rows][columns]; //Do this instead if you don't want the print statements to be called
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()