2014-04-18 4 views
1

스케치에서 사용할 Grid 클래스를 만들고 싶습니다. (Processing을 사용하고 있습니다)하지만 printGrid() 메서드에서 그리드 변수에 액세스하려고하면 NullPointerException이 발생합니다. 그리드 클래스.메소드에서 변수에 액세스하려고 할 때 NPE. Processing/Java

코드 :

Grid_Proj :

Grid gridObj; 

void setup() { 
    size(480, 360); 
    background(0); 

    gridObj = new Grid(10, 10); 

    gridObj.printGrid(); 
} 

그리드 : 나는 분명히 여기에 뭔가를 잘못하고 있어요

class Grid { 

    int[][] grid;        // Declare the Grid 

    Grid(int size_x, int size_y) { 

    int grid[][] = new int[size_x][size_y]; // Initialize the Grid 

    for (int x=0;x<size_x;x++) { 
     for (int y=0;y<size_y;y++) { 
     grid[x][y] = 0; 
     } 
    } 

    println("Created Grid Object with: ", size_x, size_y); 
    } 

    void printGrid() { 

    for (int x=0;x<10;x++) { 
     for (int y=0;y<10;y++) { 
     print(grid[x][y]);  // NPE Error here 
     } 
     print('\n'); 
    } 
    } 
} 

,하지만 무엇을 알아낼 수 없습니다. 나는 또한 아무 소용

this.grid[x][y] 

를 사용했습니다.

+0

'grid = new int [size_x] [size_y];'를 사용하여 속성을 초기화하십시오. – Crozin

답변

1
int grid[][] = new int[size_x][size_y]; 

당신은 필드를 초기화하지, 여기에 새로운 지역grid 변수를 선언한다. 따라서 grid필드null으로 유지되고 인덱스를 만들려고하면 NPE가 나타납니다. 대신이 시도 : 여담으로

grid = new int[size_x][size_y]; // use the field `grid` 

, 직접 배열 유형 후 배열 선언의 []을 넣어 자바에서 권장 :

int[][] grid // good 
int grid[][] // bad 

당신은 제대로 이렇게하려면 필드를 선언 할 때 그러나 로컬 변수 선언에는 없습니다.

+0

아주 좋은 설명과 나는 명심 해, 감사합니다. –

+0

@NikosRenieris 기꺼이 도와 드릴 수 있습니다. [답변 수락] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)을 잊지 마세요. – arshajii

1

생성자에서 grid을 메소드 범위 변수로 초기화하므로 인스턴스 필드에 값을 할당하지 않습니다. 당신이 참조 인스턴스 필드를 수행 인스턴스 메소드 printGrid,있는 이유입니다

NullPointerException 발생합니다.

생성자의 할당에서 int 만 제거하면됩니다.

+0

감사합니다. Mena. –

+0

@NikosRenieris 환영합니다 :) – Mena

0

생성자에서 로컬 그리드 배열을 만들기 때문입니다. 로컬 변수를 생성하지 말고 괜찮습니다 :

public Grid(int size_x, int size_y) { 
    this.grid = new int[size_x][size_y]; 

    for (int x=0;x<size_x;x++) { 
     for (int y=0;y<size_y;y++) { 
      this.grid[x][y] = 0; 
     } 
    } 
} 
+0

만약 그 줄을 완전히 없애면, 그리드가 생성자의 이중'for' 루프에서 그리드를 채울 때 NPE (또는 비슷한 오류)가 될 것입니다. . – ajp15243

+0

그 문제를 해결하기 위해 내 대답을 편집했습니다. – mattbdean

관련 문제