2014-11-07 4 views
0

내 코드에 문제가 있습니다. 컴파일되지만 드라이버 클래스 끝 부분에 for-each 루프가 있기 때문에 스캐너에 null이 몇 번이나 인쇄되는 문제가 발생합니다. 목표는 텍스트 파일에서 이름, 성 및 우편 번호 문자열을 읽고 for-each 루프를 사용하여 입력 내용을 인쇄하는 것입니다. 내가 뭘 잘못하고 있는지 모르겠다.FileScanner (배열 객체 포함)

입력 파일의 샘플 라인은 다음과 같이 읽을 것입니다 :

FIRSTNAME : 조 성 : Jimbob을 PostalCode : 55555

편집 : .txt 파일의 25 개 라인이 거기에있다 25 개의 Person 객체를 보유하는 배열. 내 잘못이야!

는 지금까지 단순화 한 것입니다 :

스캐너와 함께 데이터를 출력하는 드라이버 클래스 :

... throws IO Exception 

    String firstname = " "; 
     String lastname = " "; 
     String postalcode = " "; 
     File file = new File("input.txt"); 
     Scanner fileScan = new Scanner(file); 
     Person person[] = new Person[25]; // An array of 25 Person objects see Person class 


     while(fileScan.hasNext()) //Error was generated here at Line 20 originally N. Pointer Exception not too sure how to regenerate it 
     { 
      String token= fileScan.next(); //Token to scan for each word and match it with the string before it 
      if(token.equals("Firstname: ")) 
      { 
       firstname = fileScan.next(); 
      } 
      else if(token.equals("Lastname: ")) 
      { 
       lastname = fileScan.next(); 
      } 
      else if(token.equals("Postalcode: ")) 
      { 
       postalcode = fileScan.next(); 
      } 

      for(Person info : person) // Generates null on execution supposed to print Array 
      { 
       System.out.println(info); // Prints null not exactly sure why 
      } 

그리고 사람 개체가 만들어 볼 수있는 Person 클래스 :

public class Person 
{ 
    private String firstname, lastname, postalcode; 

    public Person(String firstname, String lastname, String postalcode) 
    { 
     this.firstname = firstname; 
     this.lastname = lastname; 
     this.postalcode = postalcode; 

    } 

    public String toString() 
    { 
     return(firstname + " " + lastname +" "+ postalcode); 
    } 
} 
+1

예외에 관해 묻는 열쇠는 예외 스택 추적을 실제로 표시해야하며, 어떤 행을 던져야하는지 명확하게 표시해야한다는 것입니다. 그렇지 않으면 무엇이 잘못 되었을지를 추측해야합니다. 또한 무엇이 잘못되었거나 그것이 어디에서 왔는지를 밝히기 위해 디버깅을 직접해야합니다. 그렇게하면 게시하는 코드가 문제와 관련이 있는지 확인할 수 있습니다. –

+0

나는 그것을 나타낼 것입니다! 그 점을 지적 해 주셔서 감사합니다. –

+0

또한 3 개의 .next() 행에 대해 하나의'.hasNext()'검사를 수행하고 있습니다. 나 자신은'.hasNextLine()'을 체크하고 루프 안에서'.nextLine() '을 하나만 호출하고 리턴 된 라인을 파싱한다. 당신의 오류에 대한 내 내기 - 당신은 파일에 대한 올바른 장소를 찾고 있지 않습니다. Java가 파일을 찾는 위치를 확인하려면 파일을 요청할 수 있습니다. 'System.out.println (System.getProperty ("user.dir"));' –

답변

1

while 루프를 닫은 후에 for 루프가 있어야합니다. 예 :

파일에 25 명 미만인 사람이있는 경우에도 여전히 null이 인쇄됩니다. 당신은 또한 시도 할 수 있습니다 :

for(Person info : person) 
    { 
     if(info != null){ 
      System.out.println(info); 
     } 
    } 

편집 :

는 당신이 배열에 사람들을 추가하는 것처럼 보이지 않는 눈치? like

person[2] = new Person(firstName, lastname, postalcode); //etc 
+0

예외는 IOException이므로 유효하더라도 그의 문제의 원인이 될 가능성은 적습니다. 나는 당신이 자신의 코드를 자르려고 노력하는 불쌍한 일 때문에 얼마나 많은 이슈가 발생하는지 궁금해해야한다. –

+0

와우 나는 코드에서 주석을 전혀 눈치 채지 못했다. 단지 'null 인쇄'에 대한 그의 의견을 읽고 거기에서부터 시작했다. –

+0

그의 최근 질문 업데이트로 인해 물이 좀 흐려졌습니다. 노력을 위해서 –