2012-10-11 4 views
0

격자 모양으로 맵을 만들려고합니다. 4 열 X 5 각 행을 함께 연결하고 연결합니다. 아래 코드가 컴파일되지만 실행하려고하면 오류가 발생합니다. 아무도 그것이 어디 잘못되었는지 말해 줄 수 있습니까? 감사.2D 배열로 요소를 연결하는 방법

public static final int NUM_ROOMS = 20; 

    public static final int NUM_COLS = 4; 

    private ArrayList<Room> myRooms; 

    public Map(){ 

    int row =0; 
    ArrayList<Room> myRooms = new ArrayList<Room>(); 
    while (row<NUM_COLS){ 
     int i =0; 
     i = row % NUM_COLS; 
     while(i+1<NUM_COLS){ 
      while (i+1 <(row+1)% NUM_COLS){ 
       Room r1 = myRooms.get(i); 
       Room r2 = myRooms.get(i+1); 
       r1.connectTo(r2); 
       r2.connectTo(r1); 
       i++; 
      } 
      row++; 
     } 

     int col = 0; 

     while (col<NUM_COLS){ 
      i = col; 
      while (i+4<NUM_ROOMS){ 
      i = i+NUM_COLS; 
      } 
      col++; 
     } 

    } 

} 
+1

뭐죠? .. stacktrace – PermGenError

+0

@ user1721548 게시하십시오. 미리 정의 된 클래스 또는 인터페이스, 자바의 일부입니다. 그것들은 기능을 가지고 있습니다. 그러나 이름에 클래스 이름을 사용한다면, 미리 정의 된 클래스를 사용할 때까지는 아무런 문제가 없습니다. 클래스 이름은 미리 정의 된'Map'입니다. Interface' .. http://docs.oracle.com/javase/7/docs/api/java/util/Map.html을 참조하십시오. –

+0

@RohitJain 학교에서 이러한 사소한 이름 충돌에 대해별로 신경 쓰지 않아야한다고 생각하지 않습니다. . 물론 대규모 프로덕션 환경에서는 숙련 된 프로그래머가 기능에 대한 잘못된 가정을하기 때문에 클래스 맵의 이름을 지정하는 것은 좋지 않은 아이디어입니다. 그러나 학교 예에서는 그렇지 않습니다. 그리고 Java를 처음 접했을 때 JavaSE 라이브러리에 같은 이름의 클래스가없는 것을 보장하는 것보다 훨씬 중요한 작업이 많이 있습니다. 이러한 고려 사항은 나중에 해당 라이브러리에 익숙해지면 나중에 만들 수 있습니다. – Alderath

답변

1

문제는 myRooms 목록이 비어 있다는 것입니다. 따라서 목록에서 요소를 가져 오려고하면 예외가 발생합니다.

for (int i = 0; i < NUM_ROOMS; i++) { 
    myRooms.add(new Room()); 
} 

과 같이 사용하면 목록을 먼저 채울 수 있습니다.

관련 문제