我正在尝试从文本文件中添加用户名和密码组合列表(每行包含由空格分隔的用户名密码对)到名为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;
}
答案 0 :(得分:7)
username
和password
字段为static
,这意味着它们将保留与该字段关联的每个字段的单个值(即最后指定的值)。删除static
关键字将使它们成为实例变量,并为每个类的实例创建一个值
private String username;
private String password;
答案 1 :(得分:0)
username
类中的password
和User
字段是静态的,这意味着它们是全局类变量(使用User.username
和User.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();
}