2012-08-25 4 views
0

이것은 나를 위해 오류가 발생했습니다. 나는 이것이 구문 상으로 옳다고 생각했다. Java에 대한 경험이 없습니다. 오직 C++. 누군가 내가 뭘 잘못하고 있다고 말할 수 있습니까? 당신은 grid 선언하고자바에서 열거 형 2 차원 배열을 정의하는 방법은 무엇입니까?

private enum Site{ 
    OPEN, BLOCKED } 
Site[][] grid; 

final Site DEFAULT_STATE = Site.OPEN; 
/** 
* Constructor. 
*/ 
public GridClass(int N) 
{ 
    for(int i = 0; i < N; i++) 
    { 
     for(int j = 0; j < N; i++) 
     { 
      grid[i][j] = DEFAULT_STATE; 
     } 
    } 
} 
+2

두 번째 루프에서 "j ++"가 아닌 "i ++"가되어야합니까? – DankMemes

+0

어딘가에서 메인 메쏘드가 있다고 가정합니까? ('public static void main (String [] args)') – wchargin

+0

j ++ (미안 편집 실수라고 생각합니다), 주된 방법이 있습니다. 문제가 발생하는 코드를 게시했습니다. 앞으로 더 명확하게하려고 노력할 것입니다. – BobLoblaw

답변

3

, 당신은 그것을 정의 아닙니다. 문제는 아직 그것에 할당 된 메모리를하지 않고 grid을 액세스하는 것입니다

Site[][] grid = new Site[N][N]; 
+0

메서드 외부의 코드? _ 유효하지 않습니까? – DankMemes

+0

메소드 외부의 코드는 어디에 있습니까? 이것이 모두 클래스에 있다고 가정하면, 이것은 모두 유효합니다 (for 루프는 생성자에 있습니다). – wchargin

+0

@ZoveGames이 코드는 메서드 외부에서 유효합니다. 필드'grid'를 선언하고 초기화합니다. 그러나 의도는 생성자에 넣는 것이 었습니다. – Jeffrey

2

:

당신은 뭔가를해야합니다.

는 생성자의 첫 번째 줄이 추가

grid = new Site[N][N]; 

당신이 받고있는 오류가 호출되는 NullPointerExceptiongrid[i][j] 라인이 grid 인 널 포인터 역 참조를 시도되기 때문이다.


또한 두 번째 for 루프는 i++이라고 말합니다. j++이어야합니다.

+0

고마워, 그게 해결 됐어. – BobLoblaw

+0

당신을 진심으로 환영합니다. – wchargin

0

생성자에서 배열을 만들어야합니다. 그 이유는 그것이 치수를 알고 있기 때문입니다. 정적 초기화 프로그램에서는 N이 그 시점에 범위에 있지 않기 때문에이 작업을 수행 할 수 없습니다.

public GridClass(int N) { 
    grid = new Site[N][N]; 
    for (int i=0;i<N;i++) { 
     Arrays.fill(grid[i], DEFAULT_STATE); 
    } 
} 
관련 문제