This question already has answers here:
What is a NullPointerException, and how do I fix it?
                                
                                    (12个答案)
                                
                        
                5年前关闭。
            
        

在自定义类上调用方法时,出现空指针异常。当我在驱动程序上调用Map构造函数时,出现NPE错误。我在Map.java中初始化2D数组字段

public class Map {
private Field[][] gameMap;
private int row, col;
private int rowPlayer, colPlayer;
 public Map(){
     gameMap = new Field[10][20];
     rowPlayer = 0;
     colPlayer = 0;
     gameMap[rowPlayer][colPlayer].setPlayerLoc(); //NPE happens here
 }
 }


这是Field.java

public class Field {
private int playerLoc;
private char fieldType;
private int plantedDay, readyDay;
private char typeOfCrop;
public Field(){
    fieldType = 'u';
    playerLoc = 0;
    plantedDay = 0;
}
public void setFieldUntilled(){
    fieldType = 'u';
}
public void setFieldTilled(){
    fieldType = 't';
}
public void setPlayerLoc(){
    playerLoc = 1;
}
public void removePlayerLoc(){
    playerLoc = 0;
}
public int getPlayerLoc(){
    return playerLoc;
}
public void setPlantDay(int Day){
    plantedDay = Day;
}
public void setReadyDay(int x){
    readyDay = x;
}
}


我想知道如何解决它以及为什么发生NPE。谢谢!

最佳答案

我们每天会看到N次相同的旧新手数组问题:

您创建一个二维数组,其中填充了null

   gameMap = new Field[10][20];


您从数组中获取一个值(当然是null)并尝试访问一个字段。

   gameMap[rowPlayer][colPlayer].setPlayerLoc();


之所以失败,是因为您无法访问null字段。随后出现NullPointerException

解决方案:您需要创建新的Field实例并将其分配给每个阵列单元。

09-30 15:35
查看更多