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。