0

尝试一个简单的示例,我通过控制台输入数据并将它们添加到列表中。但是输入的姓氏、年龄的值在列表中重复出现。

private List<User> getData() throws IOException{
    User user=new User();
    List<User> userList=new ArrayList<User>();
    BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
    for(int i=0;i<2;i++){
        System.out.println("Enter name,age:");
        String values=reader.readLine();
        String[] value=values.split(",");
        user.setName(value[0]);
        user.setAge(value[1]);
        userList.add(user);
    }
    return userList;

}

在打印 userList 时,列表中似乎填充了我通过控制台输入的最终值。例子,

输入姓名、年龄:rickesh,22 输入姓名、年龄:john,21

列表内容:[john 22,john 22]

public class User { 
    private String age;
    private String name;

    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
4

4 回答 4

2

在 for 循环中创建新用户。

private List<User> getData() throws IOException{    
List<User> userList=new ArrayList<User>();
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
for(int i=0;i<2;i++){
    System.out.println("Enter name,age:");
    String values=reader.readLine();
    String[] value=values.split(",");
    User user=new User();
    user.setName(value[0]);
    user.setAge(value[1]);
    userList.add(user);
}
return userList;
}
于 2012-09-12T07:01:01.047 回答
1

那是因为您只创建了 的一个实例User,并且您在每次迭代时都会不断更新它。实际上,您最终将使用与上次迭代有关的数据添加相同的实例。尝试在该循环内创建一个新User实例。for

于 2012-09-12T07:01:31.140 回答
0

移动这条指令:

User user=new User();

for循环,如下所示:

for(int i=0;i<2;i++){
    User user=new User();
    System.out.println("Enter name,age:");
    String values=reader.readLine();
    String[] value=values.split(",");
    user.setName(value[0]);
    user.setAge(value[1]);
    userList.add(user);
}
于 2012-09-12T07:01:31.427 回答
0

在 for 循环中创建新的用户对象,您的问题将得到解决:

private List<User> getData() throws IOException{
      User user=null;
    List<User> userList=new ArrayList<User>();
    BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
    for(int i=0;i<2;i++){
        user =new User();//create new user here
        System.out.println("Enter name,age:");
        String values=reader.readLine();
        String[] value=values.split(",");
        user.setName(value[0]);
        user.setAge(value[1]);
        userList.add(user);
    }
    return userList;

}
于 2012-09-12T07:08:03.850 回答