函数中的Nullpointer异常,带有2d数组作为参数

时间:2017-12-02 19:02:08

标签: java arrays multidimensional-array parameters nullpointerexception

我除了我在Level.java类中的函数允许我在程序中随时进行二维数组复制,然后更改关卡数组的大小并用复制值填充它,最后显示它。

当我尝试运行我的程序时,它在Level.java的第24行显示NullPointerException(替换值的部分)。

  

Game.java Class

package main;

public class Game {

public static void main(String[] args) {
    Level lvl = new Level();
        char[][] exampleLevelTemplate = new char[][] {
            {'#','#','#'},
            {'#','#','#'},
            {'#','#','#'}
        };
        lvl.setLevelSize(3,3);
        lvl.setLevelLayout(exampleLevelTemplate);
        lvl.displayLevel();     
    }

}
  

Level.java类

package main;

public class Level {

private int levelWidth;
private int levelHight;
private char[][]level;

public void setLevelSize(int Width,int Height)
{
    levelWidth = Width;
    levelHight = Height;
    char[][]level = new char[levelWidth][levelHight];
}

public void setLevelLayout(char[][]levelTemplate)
{
    int a; 
    int b;
    for(a=0; a < levelWidth; a++)
    {
        for(b=0; b<levelHight; b++)
        {
            level[a][b] = levelTemplate[a][b]; //Error happens here
        }
    }       
}

public void displayLevel()
{
    int a; 
    int b;
    for(a=0; a < levelWidth; a++)
    {
        for(b=0; b<levelHight; b++)
        {
            System.out.println(level[a][b]);
        }
    }
}

}

1 个答案:

答案 0 :(得分:1)

将setLevelSize方法更改为:

public void setLevelSize(int Width,int Height)
{
    levelWidth = Width;
    levelHight = Height;
    level = new char[levelWidth][levelHight];
}

您将看到该行:

char[][]level = new char[levelWidth][levelHight];

更改为:

level = new char[levelWidth][levelHight];

您只需将数组Object分配给数组引用变量“level”,而不是创建本地数据并像您一样初始化它。

您一直在为null数组引用变量赋值,因此得到了NullPointerException。