将对象添加到ArrayList <object> </object>

时间:2014-03-04 18:25:33

标签: java arraylist

我正在尝试从文本文件中添加用户名和密码组合列表(每行包含由空格分隔的用户名密码对)到名为userList的ArrayList中。 User构造函数接受两个字符串,将它们设置为用户名和密码。这应该很简单,但由于某种原因,当我在以下代码之后遍历数组时,所有用户都具有相同的用户名和密码(文本文件中的最后一行)。

见下面的代码:

BufferedReader br = new BufferedReader(new FileReader("user_pass.txt"))

String line, username, password; 

while ((line = br.readLine()) != null) {

    String separated[] = line.split(" ");

    username = separated[0];
    password = separated[1];

    userList.add(new User(username,password));
}

这是我如何遍历arrayList:

        for(User u : userList){
            System.out.println(u.getUsername()+" --> "+u.getPassword());
        }

这是用户类:

公共类用户{

private static String username;
private static String password;


public User(String u, String p) {

    username = u;
    password = p;
}

public String getUsername(){
    return username;
}

public String getPassword(){
    return password;
}

3 个答案:

答案 0 :(得分:7)

usernamepassword字段为static,这意味着它们将保留与该字段关联的每个字段的单个值(即最后指定的值)。删除static关键字将使它们成为实例变量,并为每个类的实例创建一个值

private String username;
private String password;

答案 1 :(得分:0)

username类中的passwordUser字段是静态的,这意味着它们是全局类变量(使用User.usernameUser.password调用)。您应该删除static关键字,以便单个User对象实例可以拥有用户名和密码。

答案 2 :(得分:0)

在变量用户名和密码之前删除类User中的“static”,你可能没问题。

或者,这应该有效:

class User {
    String username, password;

    public User(String u, String p) {
        username = u;
        password = p;
    }
}


//Code in the other class
Scanner s = new Scanner(new File("user_pass.txt"));
while (scanner.hasNext()) userList.add(new User(s.next(), s.next()));
s.close();

}