2014-01-11 4 views
0

아래 printf 줄의 test.main (test.java :)에서 thread "main"java.lang.NullPointerException에서 Java 예외가 발생합니다.배열에 데이터를 읽는 동안 Null 예외가 발생했습니다.

stdin에 값을 입력하고 있습니다. 예를 들어 1 2 버스를 입력 한 다음 캐리지 리턴을 입력하고 다른 행을 입력하면 Windows에서 Ctrl-Z를 사용하여 끝납니다.

인쇄 문을 넣었으므로 데이터 읽기가 정상적으로 처리 된 것처럼 보입니다. 여기서 Null 예외가 발생하는 이유는 무엇입니까? 여기

코드입니다 : 코드에서

import java.util.Scanner; 

public class test { 
    public static class Data 
    { 
     public Data() {} 
     public Data(int v1, int v2, String s1) { n1 = v1; n2 = v2; s = s1; } 
     public int n1; 
     public int n2; 
     public String s; 
    }; 

    public static void main(String[] args) { 
     int i = 0; 
     int v1, v2; 
     v1 = v2 = 0; 
     String s; 

     Data items[] = new Data[100]; 

     Scanner input = new Scanner(System.in); 

     while(input.hasNext()) { 
      switch(i % 3) { 
       case 0: v1 = input.nextInt(); break; 
      case 1: v2 = input.nextInt(); break; 
       case 2: 
        s = input.next(); 
        items[i] = new Data(v1, v2, s); 
        break; 
      } 
      ++i; 
     } 
     input.close(); 

     for(int j = 0; j < i; ++j) { 
      //on next line get Exception in thread "main" java.lang.NullPointerException at test.main(test.java:) 
      System.out.printf( "%s\t%d\t%d\n", items[j].s, items[j].n1, items[j].n2); 
     }   
    } 
} 
+0

해당 라인에 제어점을 작성하고 디버거를 가동 한 다음 변수 내용을 살펴보십시오. 그 중 하나가 null 일 가능성이 큽니다. – SirRichie

답변

1

봐, 한 번 제대로 들여 쓰기 :

switch(i % 3) { 
    case 0: 
     v1 = input.nextInt(); 
     break; 
    case 1: 
     v2 = input.nextInt(); 
     break; 
    case 2: 
     s = input.next(); 
     items[i] = new Data(v1, v2, s); 
     break; 
} 
++i; 

이 만 items[i]i % 3 == 2 경우를 초기화하는 것을 의미한다. 따라서 배열의 3 개 요소 중 2 개는 null입니다.

그러나 마지막 루프에서는 null을 테스트하지 않고 모든 요소를 ​​인쇄하려고합니다.

사이드 노트 : 필드 s, n1 및 n2의 이름을 지정하면 읽을 수없고 유지할 수없는 코드를 만드는 가장 좋은 방법입니다. 클래스와 변수에 의미있는 이름을 지정하십시오.

+0

또한 100 개의 요소가있는 배열을 미리 할당하는 대신 목록을 사용해야한다고 덧붙이고 싶습니다. 100 라인이 넘는 데이터가 있다면 ArrayIndexOutOfBounds 예외로 끝납니다. – DaveJohnston

+0

아, 얼마나 바보 같습니까, 나는 그것이 수수께끼의 자바 일이 될지도 모른다고 생각했습니다. –

관련 문제