2012-09-19 4 views
0

배열로 파일을 읽는 동안 널 포인터 예외가 발생했습니다. 나는 그것이 null이고 다른 것이 필요할 때 예외가 나타나는 것을 깨달았다. 배열 minefield가 이미 초기화되었습니다. 예외는 "minefield [i] [j] = input.charAt (j) +" ";"에서 발생합니다.배열로 파일을 읽는 중 NullPointerException이 발생했습니다.

나는이 형식의 파일을 읽으려고 해요 :

#of row 
#of column 
abcd 
efgh 
ijkl 

이것은 코드입니다 :

 try { 
      BufferedReader in =new BufferedReader (new FileReader(name+".txt")); 
      String input=in.readLine();  
      row = Integer.parseInt(input); 
      input=in.readLine(); 
      col = Integer.parseInt(input); 
      int c =0; 
      input=in.readLine(); 
      for (int i=0;i<row;i++){ 
      input=in.readLine(); 
      for (int j=0;j<col;j++){ 
        System.out.println (input.charAt(j)); 
        minefield[i][j]=input.charAt(j)+""; 
       } 
      } 
      System.out.println("The file has been loaded"); 
      in.close(); 
     } 
      catch(IOException iox){ 
       System.out.println ("Error reading file"); 
      } 

당신의 도움이 크게 감사합니다. 편집 : 죄송합니다. 나는 뭔가를 남겼습니다.

+0

i와 j에 대한 귀하의 가치는 어느 것입니까? –

+0

'행 '이란 무엇입니까? 파일에'row' 행이 ​​있습니까? –

+0

스택 추적을 보여주십시오. 예외가 발생한 정확한 행 번호를 갖습니다. –

답변

0

minefield이 초기화되었는지 확인하십시오.

minefield을 단순히 선언하면 null로 기본 설정되기 때문에 충분하지 않습니다.

private String[][] minefield; 

String[][] 어레이를 새로 할당해야합니다.

0

nameminefield이 초기화되었는지 확인하십시오. 좀 더 완벽한 코드를 사용하여 질문을 업데이트했는지 이제

try { 
    BufferedReader in =new BufferedReader (new FileReader(name+".txt")); 
    String input; 
    for (int i=0;i<row;i++){ 
     input=in.readLine(); 
     if (input == null) { 
      throw new IOException("Expected " + row + 
       " lines in the file; only found " + i + " lines"); 
     } 
     for (int j=0;j<col;j++){ 
      System.out.println (input.charAt(j)); 
      minefield[i][j]=input.charAt(j)+""; 
     } 
    } 
    System.out.println("The file has been loaded"); 
    in.close(); 
} 
catch(IOException iox){ 
    System.out.println ("Error reading file"); 
} 

편집 : 그럼, 난 당신이 row에있는 어떤 값 사이의 불일치 및 파일의 행의 수에 대비 한 보호 조치를하도록 코드를 다시 작성할 것 문제가 무엇인지 분명합니다. 파일에서 행과 열의 수를 읽은 후에는 각 행에 대해 한 행을 읽지 만 행 수에 대한 루프를 시작하기 전에 한 행을 추가로 읽습니다. 파일에 공백 행이 포함되어 있지 않으면 파일 끝이 오버런됩니다.

+0

이렇게하면 "minefield [i] [j] = input.charAt (j) +" ";" – user1337628

+0

@ user1337628에서 예외가 발생합니다. 그러면 'minefield'를 초기화하면 안됩니다. 'j' 루프 앞에'null'이 있는지 검사하면 거기에'input'을'null' 할 방법이 없으며'minefield' 만 NPE의 다른 소스입니다. –

+0

아, 지뢰밭을 다시 초기화하는 걸 잊었습니다. 도움을 주셔서 감사합니다. – user1337628

0

이 입력 파일의 내용을 감안할 때, 당신은 일치하는 행 항목이없는 추가 input = in.readLine(); 있습니다

... 
int c =0; 
input=in.readLine(); <-- remove this line 
for (int i=0;i<row;i++){ 
... 
관련 문제