有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

登录如何使用相同的代码为Java中的不同用户输入密码?

(注意:我不熟悉Java和编程,也不熟悉使用Netbeans)

我的任务是创建代码,它将首先要求输入用户名,然后要求输入密码。我的解决方案是为每个用户的密码输入提供一个单独的代码块。然而,这是非常漫长的。我用于输入密码的代码如下:

List<String> passwords = new ArrayList<>();   //array which is populated by user input
    Scanner passwordinput = new Scanner(System.in);

    do {
        System.out.print("Create password? (y/n)");        //create password request
        if (passwordinput.next().startsWith("y")) {
            System.out.print("Create password (no spaces): ");
            passwords.add(passwordinput.next());
        } else {
            break;
        }
    } while (true);

    System.out.print("Enter password: ");                    //enter password request
    String enterpass;
    enterpass = passwordinput.next();

    if (passwords.contains(enterpass)) {
        System.out.println("wohoo you're in");
    } else {
        System.out.println("bad luck brudda");
    }

总之,我询问用户是否想要创建密码,然后他们输入密码(输入字符串)。然后,他们被要求输入该密码以继续

有没有什么方法可以让我为每个用户使用相同的代码块,但不必每次都复制它

任何其他改进都是受欢迎的


共 (1) 个答案

  1. # 1 楼答案

    看看地图。在HashMap中,将一个值映射到一个固定键。因此,每个用户名(密钥)只能存在一次,但密码(值)可以始终相同
    你需要一个HashMap。这个HashMap有一个字符串作为键,一个字符串作为值。密钥是你的用户名,密码是你的值。所以你这样做:

    HashMap<String, String> logins = new HashMap<String, String>();
    String username1 = "FIRST_USERNAME";
    String password1 = "FIRST_PASSWORD";
    String username2 = "SECOND_USERNAME";
    String password2 = "SECOND_PASSWORD";
    logins.put(username2, password2);
    logins.put(username1, password1); // adds the username and the password to your "loginlist"
    String inputUser = scanner.nextLine();    
    String inputPassword = scanner.nextLine();
    if(inputPassword.equals(logins.get(inputUser)){
     // Password and user correct
    }
    

    编辑:
    下面是一个如何使用方法的示例。也许你那时更明白。希望你对例外情况有所了解。如果不是的话,你应该了解它们,因为它们对java来说是必不可少的

    public class LoginManager {
    
    private Map<String, String> logins;
    
    public LoginManager() {
        this.logins = new HashMap<String, String>();
    }
    
    public void logIn(final String pUserName, final String pPassword) {
        if (pPassword == null) {
            throw new IllegalArgumentException("No password given");
        }
        if (!pPassword.equals(this.logins.get(pUserName))) {
            throw new IllegalStateException("Wrong username or password");
        }
    }
    
    public void registerUser(final String pUserName, final String pPassword) {
        if (pUserName != null && pPassword != null) {
            if (!pUserName.isEmpty() && !pPassword.isEmpty()) {
                if (!this.logins.containsKey(pUserName)) {
                    this.logins.put(pUserName, pPassword);
                    return;
                }
            }
            else {
                throw new IllegalStateException("Username already in use");
            }
        }
        throw new IllegalArgumentException("Username or password not given");
    }
    
    public static void main(final String[] args) {
        final String choice1 = "1";
        final String choice2 = "2";
        LoginManager manager = new LoginManager();
        Scanner input = new Scanner(System.in);
        boolean loginTried = false;
        while (!loginTried) {
            System.out.print("Register new user(1) or login (2): ");
            switch (input.nextLine()) {
                case choice1:
                    System.out.print("New username: ");
                    String userName = input.nextLine();
                    System.out.print("Password: ");
                    String password = input.nextLine();
                    try {
                        manager.registerUser(userName, password);
                        System.out.println("User registered");
                    }
                    catch (Exception error) {
                        System.out.println(error.getMessage());
                    }
                    break;
                case choice2:
                    loginTried = true;
                    System.out.print("Username: ");
                    String loginName = input.nextLine();
                    System.out.print("Password: ");
                    String loginPassword = input.nextLine();
                    try {
                        manager.logIn(loginName, loginPassword);
                        System.out.println("Login was successfully");
                    }
                    catch (Exception error) {
                        System.out.println("Login failed: " + error.getMessage());
                    }
                    break;
                default:
                    System.out.println("Invalid choice. Choose 1 or 2");
                    break;
            }
        }
        input.close();
     }
    }