2014-11-23 1 views
0

나는 컬렉션에 대해 배우기 시작한 완전한 Java 초보자입니다. 텍스트 파일을 가져 와서 해당 파일의 내용에서 개체 목록을 만들 수있는 프로그램을 작성하려고합니다. 특히, 나는 각 학생의 이름, 성 및 졸업 연도가있는 수업을 학생들에게 제공합니다. 내가 사용하고 텍스트 파일 형식으로되어 있습니다List.Unknown 실수로 여러 번 Java에 추가하기

톰 블루 2007 리처드 그린 1996 로버트 블랙 2003 베스 화이트 2005

각 학생 사이에 새로운 라인을 제외하고. 내가 얻는 문제는 내 목록을 만들 때 갈 때, 내 목록에 마지막 학생이 무엇이든 여러 인스턴스로 목록을 만드는 것처럼 보입니다. 예를 들어 위의 네 학생과 함께 파일을 사용하면 내 프로그램에서 Beth White 2005 사본 4 개가 포함 된 목록을 만듭니다. 여기에서 내가 뭘 잘못하고 있는지 확실하지 않습니다 ... 나는 생각하지 않습니다. 내 스캐너의 문제이며, 기본 인쇄 방법을 사용하고 동일한 결과가 발생했기 때문에 내 인쇄 방법에 문제가 없다고 확신합니다. 혹시

import java.io.IOException; 
import java.lang.IllegalStateException; 
import java.nio.file.*; 
import java.util.*; 

public class StudentList 
{ 
private static Scanner input; 

public static void main(String[] args) 
{ 
    Scanner keyInput = new Scanner(System.in); 

    System.out.println("Please enter the name of the file containing the students."); 
    String fileName = keyInput.next(); 

    List<Student> studentList = new ArrayList<>(openAndReadFile(fileName)); 
    printList(studentList); 
} 

private static List<Student> openAndReadFile(String fileName) 
{ 
    try 
    { 
     input = new Scanner(Paths.get(fileName)); 
    } 
    catch (IOException ioException) 
    { 
     System.err.println("Error opening file. Terminating."); 
     System.exit(1); 
    } 

    List<Student> studentList = new ArrayList<>(); 

    try 
    { 
     while (input.hasNext()) 
     { 
      studentList.add(new Student(input.next(), input.next(), input.nextInt())); 
     } 
    } 
    catch (NoSuchElementException ee) 
    { 
     System.err.println("File improperly formed. Terminating."); 
    } 
    catch (IllegalStateException se) 
    { 
     System.err.println("Error reading from file. Terminating."); 
    } 

    if (input != null) 
     input.close(); 

    return studentList; 
} 

private static void printList(List<Student> list) 
{ 
    for (Student student : list) 
     System.out.printf("%s%n", student); 
} 
} 

답변

2

클래스 Student 사용을합니까 static 필드 : 여기 내 코드는?

필드를 사용하면 클래스의 모든 인스턴스, 즉 마지막으로 할당 된 필드에 대해 필드 당 하나의 가능한 값이 지정됩니다. 이 경우 Student

+0

답변의 형식으로 작성되지 않았지만이 형식이어야합니다. –

+0

이것은 정확하게 문제가되었습니다. 고맙습니다. 나는 여전히 '정적'의 진정한 의미에 관해서 나 자신을 가르쳐야 만한다. 그러나 나는 그 작은 설명을 고맙게 생각한다. –

관련 문제