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

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
    }
}

关键修改说明

  1. 统一Scanner实例:只用一个Scanner避免输入冲突,调用nextInt()后用scanner.nextLine()清除残留换行符,防止后续nextLine()读取空内容。
  2. User类新增密码getter:添加getPass()方法,让登录逻辑可以获取用户密码进行校验。
  3. 实现登录验证逻辑:遍历用户集合,对比输入的用户名和密码是否与已注册用户匹配,根据结果输出对应提示。
  4. 优化输入交互:增加非数字输入的处理逻辑,避免程序崩溃;完善退出选项提示,提升交互体验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:45:17