1

我除了在Level.java类中的函数允许我随时在我的程序中创建二维数组副本,然后更改级别数组的大小并将其填充为copy和at最后显示它。Nullpointer在函数中使用2d数组作为参数异常

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

Game.java类

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

更改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]; 

你只是需要指定数组对象数组引用变量“水平”,而不是创建一个本地一个和初始化它就像你一样。

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