如何在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
相关产品推荐
相关产品推荐

