我是一個完整的Java新手剛剛開始瞭解集合。我正在嘗試編寫一個程序,該程序可以創建一個文本文件並根據該文件的內容創建一個對象列表。具體來說,我有一個班,每個學生都有一個名字,姓氏和一個畢業年級的學生。我使用的文本文件的格式如下:List.Add不留神添加同樣的事情中多次的Java
湯姆·藍2007 理查德·格林1996年 柏立基2003 貝絲·懷特2005年
除了每個學生之間的新線路。我得到的問題是,當我去創建我的列表時,它似乎創建了一個列表,其中包含最後一名學生在我的列表中的多個實例。例如,如果我使用上面四位學生的文件,我的程序會創建一個包含4個Beth White 2005副本的列表。我不完全確定我在這裏做錯了什麼......我不認爲它是一個我的掃描儀存在問題,而且我確定這不是我的打印方法的問題,因爲我使用了默認的打印方法,並且發生了相同的結果。這裏是我的代碼:
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);
}
}
不以答案的形式編寫,但必須如此。 – 2014-11-23 00:22:19
這正是這個問題。謝謝。我還沒有對「靜態」的真正含義進行自我教育,但是我很欣賞這個小小的描述。 – 2014-11-23 00:41:40