嘿伙计们我有一个用户注册然后登录的表单。注册用户名和密码中的数据存储在这样的哈希映射中:
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);
}
我还检查用户名中的重复条目,并且工作正常
当我尝试将用户登录时,会出现问题。
这是我的登录代码:
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 :(得分: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
}
答案 1 :(得分:0)
检查用户是否存在的代码会检查地图的密钥(usersMap.containsKey
),但后面的代码会检查值(usersMap.values().contains(loginUser)
)
答案 2 :(得分:0)
由于您的HashMap将用户名和密码存储为值,因此您需要将输入的值与“username”和“password”键对应的值进行比较。
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”)将返回用户名。