1

Level.java 클래스의 함수가 내 프로그램에서 언제든지 2D 배열 복사본을 만들 수 있다는 것을 제외하고 수준 배열의 크기를 변경하고 copy 및 at의 값으로 채 웁니다 마지막으로 표시합니다.Nullpointer 예외로 2 차원 배열을 인수로 사용 함

내 프로그램을 실행하려고하면 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]; 
} 
,536 당신은 그 선이 표시됩니다

: 당신은 그냥 "수준"배열 참조 변수에 배열 개체를 지정하고 지역을 만들 초기화 할 필요가

level = new char[levelWidth][levelHight]; 

:

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

이 변경되었습니다 너처럼.

null 배열 참조 변수에 값을 할당 했으므로 NullPointerException이 발생합니다.