gpt4 book ai didi

java - 从文本文件写入 Java ArrayList 给我带来了问题

转载 作者:行者123 更新时间:2023-12-01 21:49:28 25 4
gpt4 key购买 nike

我的任务是从文本文件(有 2 列 - 姓名和经理姓名 - 以及 9 行)中提取所有记录,从每条记录(姓名和经理)创建一个 Employee 对象,然后添加雇员对象到接受 Employee 对象的 ArrayList。

出于某种原因,当我稍后尝试循环遍历列表时,似乎最后一条记录就是为所有记录存储的内容。

下面是我的代码。我什至在添加 token 之前放置了一些打印行语句,以确保 token 是正确的名称和经理名称,但同样,当我随后循环遍历它时,所有记录都显示为“Veronica 和 Bob”。

这是文本文件:

Betty     Sam
Bob Sally
Dilbert Nathan
Joseph Sally
Nathan Veronica
Sally Veronica
Sam Joseph
Susan Bob
Veronica

这是我的方法:

List<Employee> employees = new ArrayList();

public void loadData() throws FileNotFoundException, IOException {
FileReader fr = new FileReader("C:\\Users\\jeff\\Documents\\NetBeansProjects\\Java3Project1\\src\\java3project1\\employee.txt");
BufferedReader br = new BufferedReader(fr);
String line;
Employee e = new Employee();
while ((line = br.readLine()) != null) {

StringTokenizer st = new StringTokenizer(line);
int counter = 0;
while (st.hasMoreTokens()) {
String token = st.nextToken();
if (counter==0){
e.setName(token);
System.out.println("Name added: " + token);

}
if (counter == 1) {

e.setManager(token);
System.out.println("Manager set: " + token);
}
employees.add(e);
counter++;
}//end while2
}//end while1
} //end loadData()

当我在调用此方法后检查列表时,所有记录都显示为“Name: Veronica Manager: Bob”

我似乎无法弄清楚我做错了什么。非常感谢所有帮助。如果您有任何疑问或需要更多说明,请告诉我。

谢谢!

最佳答案

数组列表中的所有员工都引用您在开始读取文件之前创建的同一个 e 实例,(它们都共享同一个实例)

你需要改变

Employee e = new Employee();
while ((line = br.readLine()) != null) {

while ((line = br.readLine()) != null) {
Employee e = new Employee();

以便在将每个Employee 添加到数组列表之前为每个Employee 创建一个新的、单独的实例。

编辑:

您在内部循环的每次迭代结束时添加了一名新员工(运行两次),这就是您使记录加倍的原因。

while ((line = br.readLine()) != null) {
Employee e = new Employee();
StringTokenizer st = new StringTokenizer(line);
int counter = 0;
while (st.hasMoreTokens()) {
String token = st.nextToken();
if (counter==0){
// Set the name
}
if (counter == 1) {
// Set the manager
}

// employees.add(e); // Move this line from here
counter++;
}//end while2
employees.add(e); // to here : the name & the manager are now both set
}//end while1

关于java - 从文本文件写入 Java ArrayList 给我带来了问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35394930/

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