2012-09-10 3 views
0

현재 미로에 대한 그리드를 나타내는 2D 배열을 만들었습니다. 내가 눈치 챘을 디버깅하는 동안 CURR가로 초기화된다2D 배열 초기화 오류

Maze m = new Maze(4, 4); 

을하지만, 내 미로를 통과하고 때 : 내 테스트 클래스에 다음과

public Maze(int rows, int columns) 
{ 
    this.rows = rows; 
    this.cols = columns; 
    curr = new Square[rows][columns]; 
} 

: 내 미로 생성자는 다음과 같다 열에 대한 인수가없는 Square [4] [] 누구든지이 문제가 여기에 무엇인지 알 수 있습니까?

편집 : 이것이 내가하려는 의도입니다. curr = Square [rows] [columns]를 만들지 만, 다음 루프에서 curr의 값을 검사 할 때 디버거 도구 curr에 curr [i] [j]에 들어갈 때마다 Square [4] [] 값이 있습니다. ] 루프에서.

for(int i = 0; i < maze.length; i++) 
    { 
     for(int j = 0; j < maze[i].length; j++) 
     { 
      /* Entrance */ 
      if(maze[i][j] == start) 
      { 
       startX = j; 
       startY = i; 
       curr[i][j] = new Square(i, j, start, this); 
      } 
      /* Exit */ 
      else if(maze[i][j] == end) 
      { 
       endX = j; 
       endY = i; 
       curr[i][j] = new Square(i, j, end, this); 
      } 
      /* Traversable Squares */ 
      else if(maze[i][j] == traverse) 
      { 
       curr[i][j] = new Square(i, j, traverse, this); 
      } 
      /* Non-traversable Squares */ 
      else 
      { 
       curr[i][j] = new Square(i, j, noTraverse, this); 
      } 
     } 
    } 
+0

curr을 할당 할 때 디버거를 사용하여 여기에서 단계별로 열 값을 확인합니다. 그리고 이것이 Square [4] []로 초기화된다는 것을 어떻게 알 수 있습니까? – ajon

+0

내 미로를 통과하기 위해 디버거를 사용할 때 curr은 항상 Square [4] [] – user1660285

+0

Square [4] []는 무엇을 의미합니까? 스퀘어 [4] [0]과 같은 것을 의미합니까? – Cemre

답변

1

Java는 다차원 배열에 '비정형 배열'을 사용합니다. 즉, 모든 행의 길이가 동일한 직사각형 배열을 지정하는 경우에도 Java는 행의 길이가 다를 수있는 가능성을 허용합니다. 결과

, CURR = 새로운 광장 [R] [C] 생성 R + 1 개체 :

1 array with length r, where each element is an array of Squares (Square[])

r arrays of Squares, each of length c (although c could be changed for any of them)

그래서 curr 사실에 Square[r][]이다 그것이 인 가변 길이 스퀘어 어레이의 r 엘리먼트 배열. 각각 길이가 c 엘리먼트가됩니다. curr[n][m]이 당신이보고있는 무엇인가 Square

1

enter image description here

동안

curr[n]Square[]해야 하는가? 이 경우 디버거는 curr이 몇 개의 요소가 하위 배열에있는 것이 아닌 Square 배열의 배열임을 알고 있습니다. new Square[4][4]은 자동으로 내부 배열을 만드는 바로 가기입니다. 이를 수행하는 또 다른 방법은 다음과 같습니다.

Square[][] curr = new Square[4][]; 

for (int ctrOut = 0; ctrOut < 4; ctrOut++) { 
    curr[ctrOut] = new Square[5]; 

    for (int ctrIn = 0; ctrIn < 5; ctrIn++) { 
     curr[ctrOut][ctrIn] = new Square(); 
    } 
} 

그렇다면 디버거에서 사용자에게 맞는 것으로 보입니다. (참고로 4x5 대신에 4x5를 사용했습니다.)

+0

네, 그게 저에게 보여주고있는 것입니다. 나는 이것이 오류일지도 모른다고 생각했지만 지금은 나에게 의미가 있다고 설명했다. 고마워요! – user1660285