Java 如何从hashmap检查用户名和密码

Java 如何从hashmap检查用户名和密码,java,hashmap,user-input,Java,Hashmap,User Input,我正在尝试创建一个需要登录的小型客户端/服务器聊天应用程序。我制作了3个散列图,1个用于已有用户,1个用于管理员,1个用于注册用户。我可以使用预先存在的用户登录,也可以使用管理员用户登录,但无法使用已注册用户的详细信息登录。我怎样才能解决这个问题,因为我已经尝试了一些方法,但似乎没有任何效果 注册用户进入一个hashmap,该hashmap位于一个可公开访问的类中,我可以向该hashmap添加新用户,但我无法使用log按钮来检查该hashmap 包含映射的类 public class map

我正在尝试创建一个需要登录的小型客户端/服务器聊天应用程序。我制作了3个散列图,1个用于已有用户,1个用于管理员,1个用于注册用户。我可以使用预先存在的用户登录,也可以使用管理员用户登录,但无法使用已注册用户的详细信息登录。我怎样才能解决这个问题,因为我已经尝试了一些方法,但似乎没有任何效果

注册用户进入一个hashmap,该hashmap位于一个可公开访问的类中,我可以向该hashmap添加新用户,但我无法使用log按钮来检查该hashmap

包含映射的类


public class map {
    
        public static HashMap<String, String> usermap = new HashMap<>();
        
        public HashMap<String, String> getUsers()
        {
            return usermap;
        }
     }



公共类地图{
public static HashMap usermap=new HashMap();
公共HashMap getUsers()
{
返回usermap;
}
}
登录按钮


private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         

        String username = userText.getText();
        String password = passwordText.getText();
        Component frame = null;

      //Create a map for users where put username as key and password as value
      Map<String, String> usersMap = new HashMap<>();
      usersMap.put("user1", "password1");
      usersMap.put("user2", "password2");

      //Create a map for the admin where put username as key and password as value
      Map<String, String> adminMap = new HashMap<>();
      adminMap.put("Admin", "password");

      // Implement your authentication
      if(usersMap.get(username) != null){
           JOptionPane.showMessageDialog(frame, "You are successfully logged in!");
           setVisible(false); //you can't see me!
           dispose(); //Destroy the JFrame object
           chatClient second = new chatClient();
           second.setVisible(true); //displays the client page

      } else if (adminMap.get(username) != null){
            JOptionPane.showMessageDialog(frame, "You are successfully logged in!");
            setVisible(false); //you can't see me!
            dispose(); //Destroy the JFrame object
            chatServer third = new chatServer();
            third.setVisible(true); //displays the server page

      } else if (map.usermap.equals(username,password)){
            JOptionPane.showMessageDialog(frame, "You are successfully logged in!");
            setVisible(false); //you can't see me!
            dispose(); //Destroy the JFrame object
            chatServer third = new chatServer();
            third.setVisible(true); //displays the server page    
      }else {
            success.setText("Invalid username or password entered");
      }    
        
    
    }    


私有void jButton2ActionPerformed(java.awt.event.ActionEvent evt){
字符串username=userText.getText();
字符串密码=passwordText.getText();
组件帧=空;
//为用户创建一个映射,其中用户名作为密钥,密码作为值
Map usersMap=newhashmap();
usersMap.put(“user1”、“password1”);
usersMap.put(“user2”、“password2”);
//为管理员创建一个映射,其中用户名作为密钥,密码作为值
Map adminMap=newhashmap();
adminMap.put(“管理员”、“密码”);
//实现您的身份验证
if(usersMap.get(username)!=null){
showMessageDialog(框架“您已成功登录!”);
setVisible(false);//你看不见我!
dispose();//销毁JFrame对象
chatClient second=新chatClient();
second.setVisible(true);//显示客户端页面
}else if(adminMap.get(username)!=null){
showMessageDialog(框架“您已成功登录!”);
setVisible(false);//你看不见我!
dispose();//销毁JFrame对象
chatServer third=新的chatServer();
third.setVisible(true);//显示服务器页面
}else if(map.usermap.equals(用户名、密码)){
showMessageDialog(框架“您已成功登录!”);
setVisible(false);//你看不见我!
dispose();//销毁JFrame对象
chatServer third=新的chatServer();
third.setVisible(true);//显示服务器页面
}否则{
success.setText(“输入的用户名或密码无效”);
}    
}    

如评论中所述,对问题建模的更清晰方法是:

enum UserType {
    EXISTING, ADMIN, REGISTERING;
}

class User {
    private String username;
    private String password;
    private UserType type;
}
实际上,使用地图按用户名查找密码的唯一原因是,如果您将有很多用户,或者每秒执行多次查找。如果你想要那张地图,它看起来会像:

Map<String,User> userMap;

正如评论中所讨论的,对问题建模的更清晰方法是:

enum UserType {
    EXISTING, ADMIN, REGISTERING;
}

class User {
    private String username;
    private String password;
    private UserType type;
}
实际上,使用地图按用户名查找密码的唯一原因是,如果您将有很多用户,或者每秒执行多次查找。如果你想要那张地图,它看起来会像:

Map<String,User> userMap;

您应该在
map.usermap.equals(username,password)
上得到一个语法错误,因为
HashMap
中没有接受两个参数的
equals
方法。我怀疑您想要
password.equals(map.usermap.get(username))
。我明白了,谢谢您的帮助。为什么创建
map
类只是为了保存一个map实例?需要考虑的其他事项:您真的不需要3个map。最好在用户类中有一个字段,用于存储用户的“类型”,然后只需要一个映射。还请注意,
公共静态
变量(即非
最终
)被几乎所有有经验的Java程序员认为是不好的做法。这是我在@basilbourques分配任务中的一项要求。你应该在
map.usermap.equals(用户名、密码)上得到语法错误
因为在
HashMap
中没有接受2个参数的
equals
方法。我怀疑您想要
password.equals(map.usermap.get(username))
。我明白了,谢谢您的帮助。为什么创建
map
类只是为了保存一个map实例?需要考虑的其他事项:您真的不需要3个map。最好在用户类中有一个字段,用于存储用户的“类型”,然后只需要一个映射。还要注意,
公共静态
变量(即非
最终
)被几乎所有有经验的Java程序员认为是不好的做法。这是我在BasilBourque分配任务时的一项要求