Java控制台注册登录系统:登录验证功能实现求助
修复Java控制台注册登录系统的验证功能
现有代码的核心问题
- 使用多个
Scanner实例会导致输入读取异常,nextInt()后未处理换行符会让后续nextLine()读取空字符串 User类缺少密码的获取方法,无法在登录时验证密码- 登录分支没有实现用户名和密码的校验逻辑
修改后的完整代码
User类(新增密码getter)
public class User { private String username; private String pass; User(String username, String pass) { this.username = username; this.pass = pass; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } // 新增密码获取方法 public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } }
Main类(修复输入问题+实现登录验证)
import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { ArrayList<User> userList = new ArrayList<>(); Scanner scanner = new Scanner(System.in); int choice; do { System.out.println("1. 注册"); System.out.println("2. 登录"); System.out.println("0. 退出"); System.out.print("请输入选择: "); // 处理输入非数字的情况 while (!scanner.hasNextInt()) { System.out.print("请输入有效数字: "); scanner.next(); } choice = scanner.nextInt(); scanner.nextLine(); // 清除nextInt()留下的换行符 switch (choice) { case 1: System.out.println("请输入新用户名:"); String username = scanner.nextLine(); System.out.println("请输入新密码:"); String pass = scanner.nextLine(); userList.add(new User(username, pass)); System.out.println("账号已成功注册!"); break; case 2: System.out.println("请输入用户名:"); String loginUsername = scanner.nextLine(); System.out.println("请输入密码:"); String loginPass = scanner.nextLine(); // 验证用户名和密码 boolean isLoginSuccess = false; for (User user : userList) { if (user.getUsername().equals(loginUsername) && user.getPass().equals(loginPass)) { isLoginSuccess = true; break; } } if (isLoginSuccess) { System.out.println("登录成功!"); } else { System.out.println("用户名或密码错误!"); } break; case 0: System.out.println("退出系统"); break; default: System.out.println("无效选择,请重新输入"); } } while (choice != 0); scanner.close(); // 关闭Scanner } }
关键修改说明
- 统一Scanner实例:只用一个
Scanner避免输入冲突,调用nextInt()后用scanner.nextLine()清除残留换行符,防止后续nextLine()读取空内容。 - User类新增密码getter:添加
getPass()方法,让登录逻辑可以获取用户密码进行校验。 - 实现登录验证逻辑:遍历用户集合,对比输入的用户名和密码是否与已注册用户匹配,根据结果输出对应提示。
- 优化输入交互:增加非数字输入的处理逻辑,避免程序崩溃;完善退出选项提示,提升交互体验。
内容的提问来源于stack exchange,提问作者Ambiguity
相关产品推荐
相关产品推荐

