2015-01-11 1 views
0

내 코드가 txt 파일을 읽은 다음 사용자가 지정한 필드에 따라 정렬 한 다음 테이블에 출력하고 있습니다. http://i.imgur.com/LCBA2NP.png2D 배열 버블 정렬시 null 포인터 예외

: 이것은을 통해 검색되는 데이터가

if (Integer.parseInt(s[x][2])>(Integer.parseInt(s[j][2]))) 

: 나는이 프로그램을 실행하면

public static void sortByAtomicNumber() throws IOException 
{ 
    File file = new File("Elements.txt"); 
    FileReader reader = new FileReader(file); 
    BufferedReader i = new BufferedReader(reader); 

    int lines = 0; 
    while (i.readLine() != null) { 
     lines++; 
    } 

    String[][] s = new String[lines][]; 
    String line; 
    int index = 0; 

    DefaultTableModel model = new DefaultTableModel(                      //Builds the table model 
      new Object[]{"Name","Symbol","Atomic Number","Atomic Mass", "# of Valence Electrons"}, 
      0); 

    while ((line = i.readLine()) != null && index < 10) 
     s[index++] = line.split(","); 

    for (int x = 0; x < s.length; x++) 
    { 
     for (int j = x + 1; j < s.length; ++j) 
     { 
      if (Integer.parseInt(s[x][2])>(Integer.parseInt(s[j][2]))) 
      { 

       String[] temp = s[x]; 
       s[x] = s[j]; 
       s[j] = temp; 
      } 
     } 
    } 

    for(int x=0;x<s.length;++x){ 
     Object[]rows = {s[x][0], s[x][1], s[x][2], s[x][3], s[x][4]};     //Puts information about the sorted elements into rows         
     model.addRow(rows); 

    } 
    JTable table = new JTable(model);               
    JOptionPane.showMessageDialog(null, new JScrollPane(table));       //Displays the table 

} 

이 라인에 java.lang.NullPointerException이 얻기 : 여기에 코드입니다 왜 이런 일이 일어나고 있는지, 아무도 나를 도울 수 있습니까?

+0

왜 내 폐쇄가 되돌려 졌습니까? 어떤 디버깅도 수행하지 않고 NPE 질문입니다. –

+1

@JeroenVannevel - 귀하가 참조한 질문이이 사본이 아니기 때문에. 이 질문에 연구 노력이 부족하다고 생각하면 적절한 조치는 다운볼트이며 복제본으로 폐쇄되지는 않습니다. –

+0

@TedHopp : 내가 언급 한 질문은 사람들이 NPE 관련 질문을하기 전에 살펴 봐야하는 NPE 질문에 대한 표준 복제본입니다. OP는 NPE가 무엇인지 알지 못하며 어떤 디버깅도 수행되지 않았습니다. –

답변

2

실제로 데이터를 배열 s으로 읽지 않습니다. 문제는 줄을 세는 과정에서 파일의 끝까지 읽었으므로 i을 처음으로 다시 설정하지 않는다는 것입니다. 따라서 s의 모든 요소는 null입니다. 따라서 (두 번째 루프에서) 행을 읽고 파싱하는 첫 번째 시도는 null을 반환하고 파싱 루프 본문은 실행되지 않습니다.

당신은 닫고 파일을 다시, imark()reset()를 사용하여 시도하거나 (최상) 중 하나를 대신 파일의 읽기 두 단계를 수행하는 ArrayList<String[]>로 읽을 수 있습니다.

+1

질문에 대한 답을 이해할 수는 있지만 분명히 대답하지는 않습니다. Btw 나는 그의 변수 이름을 변경하는 질문의 저자를 제안 할 것입니다 ... 코드를 통해 많은 도움이됩니다. – MrVinz

+0

@MrVinz - 지원해 주셔서 감사합니다. 설명이없는 임의의 downvotes는 SO의 징벌입니다. –

+0

i에서 정확히 mark() 및 reset()을 어떻게 사용합니까? –