gpt4 book ai didi

java - List.Add 在 Java 中意外多次添加相同的内容

转载 作者:行者123 更新时间:2023-12-02 05:14:29 25 4
gpt4 key购买 nike

我是一个完全的 Java 新手,刚刚开始学习集合。我正在尝试编写一个程序,该程序可以获取文本文件并根据该文件的内容创建对象列表。具体来说,我有一个学生类(class),其中每个学生都有名字、姓氏和毕业年份。我正在使用的文本文件的格式如下:

汤姆·布鲁 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);
}
}

最佳答案

Student 类是否有可能使用 static 字段?

使用静态字段将导致为类的所有实例的每个字段分配一个可能的值,即最后分配的值。如果是这种情况,请删除 static 关键字,以便类字段对应于 Student

的每个实例

关于java - List.Add 在 Java 中意外多次添加相同的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27084074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com