2014-03-04 89 views
0

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

见下面的代码:

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)); 
} 

这里是我如何遍历数组列表:

 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

你能后的代码为您的用户类?在循环的每次迭代中,用户名和密码的值是什么? –

+13

“用户名”和“密码”字段是否为静态? – Reimeus

+1

以纯文本(例如,在您的user_pass.txt文件中)存储用户名和密码组合不是一个好主意。你应该先纠正这个问题。 – ErstwhileIII

回答

7

The usernamepassword字段为static,这意味着它们将保留与该类关联的每个字段的单个值(即最后分配的值)。卸下static关键字会使他们的实例变量,并为每个实例创建一个值类

private String username; 
private String password; 
+0

很早就发现了男人。 – christopher

0

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

0

在变量用户名和密码之前删除类User中的“静态”,您可能会确定。

或者说,这应该工作:

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(); 

}