2014-03-04 141 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(); 

}