java - 为什么此方法返回一个包含所有相同对象的 ArrayList? JAVA

标签 java file csv arraylist bufferedreader

我有一个名为 User 的类和一个名为 Users.csv 的文件,如下所示:

用户类:

public class User
{
private String name;
private String rg;
private String type;

public String getName()
{
    return name;
}

public String getRg()
{
    return rg;
}

public String getType()
{
    return type;
}

public void setName(String n)
{
    name = n;
}

public void setRg(String r)
{
    rg = r;
}

public void setType(String t)
{
    type = t;
}
}

用户.csv:

a,b,c
d,e,f
as,d,cf

此外,我还有一个名为 test 的类,它实现了一个方法:

测试类:

public class test
{
public ArrayList<User> readUsers(String path) throws IOException //read all users from file and returns an ArrayList
{       
    ArrayList<User> list = new ArrayList<User>();
    String[] str;
    User u = new User();
    BufferedReader buffRead = new BufferedReader(new FileReader(path));
    String line = buffRead.readLine(); 
    while(line != null)
    {
            str = line.split(",");
            u.setName(str[0]); //sets each field read to "u"
            u.setRg(str[1]);
            u.setType(str[2]);
            list.add(u); //adding user to the list to be returned
            line = buffRead.readLine(); //reading next register
    }
buffRead.close();
return list;
}
}  

问题出在方法 readUsers() 中。它返回一个 ArrayList,其中每个元素都是相同的,它们是 Users.csv 的最后一行。
任何提示为什么会发生?我想不通...

最佳答案

你调用了多少次 new User()?这就是您创建的 User 对象的数量:恰好一个,并且您在循环之前 执行一次。

解决方案,将其称为循环的内部 -- 这样您就可以为添加到列表中的每个项目创建一个新用户。

关于java - 为什么此方法返回一个包含所有相同对象的 ArrayList? JAVA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30519905/

相关文章:

用于基于 maxTimeuuid 和 minTimeuuid 的查询的 Java API

c - 将字符串分配给某物

regex - 如何在Notepad++中在同一行上查找多个单词

Python 文件串联

java - 如果 csv 文件为空,如何停止数组越界错误?

powershell - PowerShell Import-Csv问题-为什么我的输出被视为单列而不是CSV?

java - 如何从我的 java 类构建库文件(jar 文件)?

java - 如何使用 Action Listener 和 Action Event 让 JButtons 在 JTextField 中打印整数?

javascript - Wicket 口:StalePageException

python - 在 python 中将日期格式数据从 Excel 工作表转换为 csv 文件时输出错误