Java NullPointerException返回将填充到其他方法中的数组

Java NullPointerException返回将填充到其他方法中的数组,java,Java,当getCave方法试图返回2D数组时调用它时,我得到一个NullPointerException。我一直无法在网上找到解决方案。我可以通过用一个新的不是数组但不适合我的需要的洞穴来替换返回值,从而使程序正常运行。以下是我的代码的简化版本: import java.util.Random; public class Board { public static final int DEFAULT_ROWS = 10; public static final int DEFAU

当getCave方法试图返回2D数组时调用它时,我得到一个NullPointerException。我一直无法在网上找到解决方案。我可以通过用一个新的不是数组但不适合我的需要的洞穴来替换返回值,从而使程序正常运行。以下是我的代码的简化版本:

import java.util.Random;


public class Board {

    public static final int DEFAULT_ROWS = 10;
    public static final int DEFAULT_COLS = 10;


    Cave[][] caveArray = new Cave[DEFAULT_ROWS+2][DEFAULT_COLS+2];


    public Board(int rows, int cols){

        Random rand = new Random();


                for (int j = 1; j < (cols+1); j++) {

                    for (int i = 1; i < (rows+1); i++) {

                        Cave temp;
                        temp = new Cave(i, j);

                        int rnum = rand.nextInt(100)+1;


                        if (rnum > 50) {
                                caveArray[i][j]=temp;
                                caveArray[i][j].makeBlocked(); 
                        }


                        else if(rnum <=50) {
                                caveArray[i][j]=temp;
                                caveArray[i][j].makeOpen();
                        }
                    }
                }           
    }

    public Cave getCave(int r, int c){

        return caveArray[r][c];
    }

}
这要求:

public abstract class Character implements CaveWorker{

protected Cave location;

public Character(Cave initLoc){
    location = initLoc;

    location.setOccupied(true);
}

在不观察堆栈跟踪的情况下,我所能提供的唯一解释(这些非常有用,很多时候都是这样)是,如果您尝试索引到
cavarray[0][c]
,或者甚至
cavarray[r][0]
,那里将不会有任何内容


您有两种选择—要么使用数组将从索引0开始的事实(这并不坏),要么在第0行和第0列中预先放置一个没有实际用途的
Cave
对象。但是,与(0,0)对齐将是一个更容易的选择。

我们也可以得到您称之为此的代码吗?哪一行恰恰是导致NPE的代码?因为到目前为止,我还没有看到基于所发布代码的原因。另外,您清楚地意识到Java中的索引从零开始-您选择解决这个问题有什么原因吗?我强烈怀疑getCave是以零作为参数之一调用的,这就是为什么会得到一个null指针。其他有用的东西:StackTrace。精确获取NPE的行位于location=initLoc;用于字符类和超级(initLoc);冒险家课程。非常感谢!我不敢相信我没有看到[0][0]位置正在被调用,并且它没有填满洞穴。我还将在将来使用堆栈跟踪。
Adventurer(Cave initLoc) {
    super(initLoc);


}
public abstract class Character implements CaveWorker{

protected Cave location;

public Character(Cave initLoc){
    location = initLoc;

    location.setOccupied(true);
}