You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java 17中构建字符串数组库并实现类登录系统的访问

多用户登录系统改造方案

当前代码仅支持单用户登录操作,要扩展为多用户系统,核心是用合适的结构存储用户数据并实现用户名与密码的快速匹配,以下是具体改造方案:

一、重构Logins类:用HashMap存储多用户信息

使用HashMap<String, String>存储用户名与密码的映射关系,能通过用户名直接快速查找对应密码,比数组遍历更高效。修改后的Logins类:

package logins;

import java.util.HashMap;
import java.util.Map;

public class Logins {
    // 存储用户名-密码映射,键为用户名,值为密码
    private static final Map<String, String> userCredentials = new HashMap<>();

    // 初始化默认用户数据
    static {
        userCredentials.put("Username", "Password");
        userCredentials.put("Username1", "Password1");
    }

    // 根据用户名获取对应密码
    public static String getPasswordByUsername(String username) {
        return userCredentials.get(username);
    }

    // 修改指定用户的密码(需验证原密码)
    public static boolean updatePassword(String username, String oldPassword, String newPassword) {
        if (oldPassword.equals(userCredentials.get(username))) {
            userCredentials.put(username, newPassword);
            return true;
        }
        return false;
    }

    // 修改用户名(需验证原用户名和密码,且新用户名未被占用)
    public static boolean updateUsername(String oldUsername, String password, String newUsername) {
        if (password.equals(userCredentials.get(oldUsername)) && !userCredentials.containsKey(newUsername)) {
            userCredentials.put(newUsername, password);
            userCredentials.remove(oldUsername);
            return true;
        }
        return false;
    }

    // 检查用户名是否已存在
    public static boolean isUsernameExists(String username) {
        return userCredentials.containsKey(username);
    }
}

二、修改Main类:适配多用户交互逻辑

移除原有的单个用户密码参数,通过Logins类提供的方法处理多用户操作,同时简化代码结构:

package main;

import java.util.Scanner;
import logins.Logins;

public class Main {
    public static void main(String[] args) {
        start();
    }
    
    public static void start() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("What would you like to do? ");
        String choice = scanner.nextLine();
        command(choice, scanner);
    }
    
    public static void command(String choice, Scanner scanner) {
        switch (choice.toLowerCase()) {
            case "login":
                login(scanner);
                break;
            case "change password":
                passChange(scanner);
                break;
            case "change username":
                userChange(scanner);
                break;
            default:
                System.err.println("Invalid choice");
                start();
        }
    }
    
    public static void login(Scanner scanner) {
        System.out.println("Enter username");
        String username = scanner.nextLine();
        if (Logins.isUsernameExists(username)) {
            System.out.println("Valid Username.");
            verifyPassword(username, scanner);
        } else {
            System.err.println("No user named " + username);
            start();
        }
    }
    
    public static void verifyPassword(String username, Scanner scanner) {
        System.out.println("Enter password");
        String password = scanner.nextLine();
        if (password.equals(Logins.getPasswordByUsername(username))) {
            System.out.println("Password Correct. You are logged in");
            start();
        } else {
            System.err.println("Incorrect Password");
            start();
        }
    }
    
    public static void passChange(Scanner scanner) {
        System.out.println("Username:");
        String username = scanner.nextLine();
        if (Logins.isUsernameExists(username)) {
            System.out.println("Old Password:");
            String oldPassword = scanner.nextLine();
            if (oldPassword.equals(Logins.getPasswordByUsername(username))) {
                System.out.println("New Password");
                String newPassword = scanner.nextLine();
                Logins.updatePassword(username, oldPassword, newPassword);
                System.out.println("Password changed successfully");
                start();
            } else {
                System.err.println("Incorrect password");
                start();
            }
        } else {
            System.err.println("No user found named " + username);
            start();
        }
    }
    
    public static void userChange(Scanner scanner) {
        System.out.println("Current Username:");
        String oldUsername = scanner.nextLine();
        if (Logins.isUsernameExists(oldUsername)) {
            System.out.println("Password:");
            String password = scanner.nextLine();
            if (password.equals(Logins.getPasswordByUsername(oldUsername))) {
                System.out.println("New username:");
                String newUsername = scanner.nextLine();
                if (Logins.isUsernameExists(newUsername)) {
                    System.err.println("Username already exists");
                    start();
                } else {
                    Logins.updateUsername(oldUsername, password, newUsername);
                    System.out.println("Username changed successfully");
                    start();
                }
            } else {
                System.err.println("Incorrect password");
                start();
            }
        } else {
            System.err.println("No user found named " + oldUsername);
            start();
        }
    }
}

三、关键改进说明

  • 数据结构优化:HashMap提供O(1)时间复杂度的查找效率,比数组遍历更适合多用户场景
  • 职责分离:Logins类封装所有用户数据操作,Main类专注于交互逻辑,代码结构更清晰
  • 扩展性提升:后续添加用户注册等功能,只需在Logins类中新增对应方法即可,无需大幅修改交互逻辑

内容的提问来源于stack exchange,提问作者anEgg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 07:09:19