2012-10-03 2 views
0

그래서 난과 같이 2 차원 배열까지 정상 선언배열 액세스가 거부되었습니다.

private JPanel[][] panels = new JPanel[10][8]; 

은 그럼과 같이 그것을 채우기 : 그럼

GridBagConstraints c = new GridBagConstraints(); 
for(int i = 0; i < 8; i++){ 
     for(int j = 0; j < 10; j++){ 
      JPanel temp = new JPanel(); 
      if(rand.nextInt(10)+1 > 8 && (j != 0 && i != 0)){ 
       temp.setBackground(Color.BLACK); 
       temp.setName("wall");     
      }else{ 
       temp.setBackground(Color.WHITE); 
       temp.setName("space"); 
      } 
      c.gridx = j; 
      c.gridy = i; 
      boardCotent.add(temp,c); 
      panels[j][i] = temp; 
     } 
    } 
} 

좋아, 출력 그것이 바로 채워 확인? 스위치에서 다음

, 나는 액세스하려고 해요 ...이 일을, 그래서 분명히

2:2 -> wall 
3:2 -> null 
4:2 -> null 
5:2 -> wall 

: 여기

for(int i = 0; i < 8; i++){ 
    for(int j = 0; j < 10; j++){ 
     System.out.println(j + ":" + i + " -> " + panels[j][i].getName()); 
    } 
} 

는 루프 위의 출력 샘플입니다 그것이 "벽"인지 "공간"인지 확인하고 널 포인터 예외가 생깁니다. 여기에 결함이있는 것 같습니까?

if(y > 0 && !panels[x][y-1].getName().matches("wall")){ 
    y--; 
} 
+1

'패널 [X] [Y-1] y'가'널 (null)입니다'체크 일부 널 (null)을 할 필요가 의미'3' 'x'는'3' 또는'4'입니다. –

+0

귀하의 스위치는 어디입니까 ?? –

+0

여기에 붙여 넣지 않았습니다. 이것은 플레이어가 향하고있는 방향을 나타내는 사적인 변수의 스위치였습니다. 따라서 y 또는 x는 증가/감소합니다. 나는 일요일부터 모든면에서 스위치를 테스트 했으므로 괜찮습니다. 나는이 배열에 문제를 격리시켰다 ... 나는 지금 고쳐야한다. 그리고 나의 판을 실제로 상쾌하게하기 위해 나의 창문을 상쾌하게하는 것에 고투하고있다. 나는 내가 할 수 있다면 그것에 대한 질문을 게시 할 것이다. 내 연구와 문서화에서 무엇이든 돌리십시오. 답장을 보내 주셔서 감사합니다. :) –

답변

1
2:2 -> wall 
3:2 -> null 
4:2 -> null 
5:2 -> wall 

먼저이 부분을 probleme있다. null 값 대신에 space이 있어야합니다. 이 코드를 실행할 때

if(y > 0 && !panels[x][y-1].getName().matches("wall")) 
{ 
    y--; 
} 

둘째, 0 <= x < 100 <= y < 8을 확인합니다.

+0

오른쪽, 미안 해요 내 출력에서 ​​잘못된 정보를 붙여 넣습니다. 그것은 공간과 두 중간에 null이 아니라고 말합니다 .. 미안 한판 승부 .. 나는 그 코드를 넣어, 좋은 생각. 그것은 문제를 해결하지 못했습니다. JLabel에 아이콘을 추가하려고 시도하는 것을 중단 한 후에 작업을 시작 했으므로 이제는 그 문제를 해결하기 위해 노력 중입니다. Cyril에게 감사드립니다. :) –

0

두 배열 크기의 인덱스를 혼합하지 않습니까?
간단하게 확인하려면 다음을 수행하십시오

int maxY = 10, maxX = 8; 
private JPanel [][] panels = new JPanel[maxY][maxX]; 

for(int y = 0; y < maxY; y++) 
    for(int x = 0; x < maxX; x++) 
    { 
    panels[y][x] = new JPanel(); 
    System.out.println("array[y=" + y + "][x=" + x + "] = " + panels[y][x]); 
    } 

가 그 일을합니까?

0

당신은

if(y > 0 && !panels[x][y-1].getName().matches("wall")){ 
    y--; 
} 

와 NPE을 받고 당신이

if(y > 0 && panels[x][y-1] != null && !panels[x][y-1].getName().matches("wall")){ 
관련 문제