2014-12-10 66 views
0
存在

嗨我有一個形式,其中用戶寄存器,然後登錄在從登記的用戶名和密碼的數據被存儲在散列映射是這樣的:登錄用戶如果值在HashMap中

if (usersMap.containsKey("username")) { 
    JOptionPane.showMessageDialog(LoginForm.this, "User already exists !", "ERROR", JOptionPane.ERROR_MESSAGE); 
} else { 
    usersMap.put("username", registerUser.getText()); 
    usersMap.put("userpassword", registerPassword.getPassword()); 
    JOptionPane.showMessageDialog(LoginForm.this, "Registration Successful !!", "SUCCESS", JOptionPane.PLAIN_MESSAGE); 
} 

我也爲您在用戶名重複的條目,它工作正常

當我試圖登錄的用戶將出現problemm

這裏是我的登錄代碼:

private void clickEventRightPanel() { 
     loginBtn.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       unameLog = loginUser.getText(); 
       logPass = loginPassword.getPassword(); 

       if (usersMap.values().contains(loginUser.getText()) && usersMap.values().contains(loginPassword.getPassword())) { 
        JOptionPane.showMessageDialog(LoginForm.this, "Login sucessfull !!", "SUCCESS", JOptionPane.PLAIN_MESSAGE); 
       } else { 
        JOptionPane.showMessageDialog(LoginForm.this, "User does not exist ! Try again !", "ERROR", JOptionPane.ERROR_MESSAGE); 
       } 

      } 
     }); 

    } 

任何有關可能會在這裏出錯的想法?

+0

想與大家分享是什麼問題? – 2014-12-10 22:01:27

+0

它去到else語句是用戶不存在 – Eleni 2014-12-10 22:02:21

+5

你**完全**濫用hashmaps。你需要一張用戶名映射表來散列密碼。 – SLaks 2014-12-10 22:04:44

回答

0

你的代碼,以檢查用戶是否存在檢查地圖(usersMap.containsKey),但後來碼的按鍵檢查​​值(usersMap.values().contains(loginUser)

+0

我嘗試了兩種方式,它不工作......我該如何檢查? – Eleni 2014-12-10 22:07:43

+3

他在地圖上的鑰匙是「用戶名」!並且他將用戶名作爲值存儲在地圖中。在這種情況下不正確的ans。 – aadi53 2014-12-10 22:07:46

0

由於您的HashMap存儲作爲值的用戶名和密碼,你會想比較輸入值爲「用戶名」和「密碼」鍵的相應值。

if(usersMap.containsKey("username") && userMap.containsKey("password"){ 
    //There is a mapping for username and password. 
    if(usersMap.get("username").equals(unameLog) 
    && usersMap.get("password").equals(logPass)){ 
     //login successful 
    } 
    else 
     //Login failed, but mapping exists. 
}else 
    //No mapping for username or password. 

由於usersMap.get(「username」)將返回用戶名。

+0

除OP中的Hashmap外,密碼不以用戶名作爲密鑰存儲。 – GriffeyDog 2014-12-10 22:09:20

+0

'因爲你的HashMap有用戶名作爲密鑰,密碼作爲值'...你應該再次閱讀他的代碼:)。 – Tom 2014-12-10 22:09:22

+0

它不能像這樣工作...仍然去else語句 – Eleni 2014-12-10 22:14:26

-1

地圖不能像這樣工作。

在地圖中,每個值都有一個唯一的鍵。您可以使用該鍵查找該值。

對於您添加的每個值,都使用「用戶名」和「用戶密碼」鍵。這意味着地圖中只能有1個用戶名和1個密碼。

你應該密碼的用戶名在你的地圖關聯起來,就像這樣:

usersMap.put(registerUser.getText(), registerPassword.getPassword()); 

而當你想測試,如果登錄憑證是有效的,你用

String pass = usersMap.get(loginUser.getText()); 
if(pass == loginPassword.getPassword()) { 
    // login code here 
} 
+0

這讓任何用戶登錄與其他人的密碼 – SLaks 2014-12-10 22:09:50

+0

然後我該如何使用這樣的hashmap? usersMap.put(usersList,passwordsList); – Eleni 2014-12-10 22:13:17

+0

我不確定你是什麼意思,你想添加很多用戶嗎? – 2014-12-10 22:19:09

2

你不正確使用或檢查地圖。首先,您需要將用戶名密碼映射:

usersMap.put(registerUser.getText(), registerPassword.getPassword()); 

現在,只要你有一個登錄嘗試,試圖找到在地圖中的用戶名,如果用戶被發現,你比較存儲的密碼登錄密碼:

if (usersMap.containsKey(loginUser.getText())) { 
    String storedPassword = usersMap.get(loginUser.getText()); 
    if (storedPassword.equals(loginPassword.getPassword())) { 
     // valid login 
    } else { 
     // invalid login 
    } 
} else { 
    // invalid login 
} 
+0

仍然不起作用 – Eleni 2014-12-10 22:21:33

+0

好吧,它給了我一個錯誤,因爲你試圖保存爲storedPassword返回一個對象並要求轉換爲字符串。 – Eleni 2014-12-10 22:28:57

+0

@Eleni將你的地圖從'Map'改變爲'Map '。 – Tom 2014-12-10 22:40:18

相關問題