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

Java比对用户名密码数组实现登录功能逻辑异常问题求解

问题根源分析
  • 比对逻辑完全错误:你使用String.indexOf()方法进行比对,该方法的作用是返回子串在原字符串中首次出现的索引,如果找不到就返回-1。当你输入用户名john、密码512时,第一个遍历的账号是admin,"admin".indexOf("john")返回-1,"123".indexOf("512")也返回-1,两个-1相等,就触发了登录成功的错误逻辑。
  • 循环仅执行一次就中断:你在if和else分支里都加了break语句,无论第一个账号是否匹配,循环直接终止,永远不会比对第二个john、第三个alina的账号信息。这也是你输入john和正确密码456也会提示失败的原因——程序只比对了第一个admin的账号,匹配失败直接退出循环返回错误。
  • 错误提示时机错误:只要第一个账号匹配失败就弹出错误提示,没有完成所有账号的遍历校验。
修复方案

正确的逻辑应该是遍历所有账号,先判断当前遍历到的用户名是否和输入用户名一致,只有用户名一致时才比对对应密码,密码也一致才判定登录成功,跳出循环;如果遍历完所有账号都没有找到匹配的,再弹出错误提示。

修复后代码
public static boolean UserLogin() {
    String[] username = {"admin", "john", "alina"};
    String[] password = {"123", "456", "789"};
    String user, pass;
    boolean isValid = false;

    Scanner input = new Scanner(System.in);
    System.out.println("Enter your username: ");
    user = input.nextLine();

    System.out.println("Enter your password: ");
    pass = input.nextLine();

    for (int i = 0; i < username.length; i++) {
        // 先匹配用户名,用户名一致再匹配密码
        if (username[i].equals(user) && password[i].equals(pass)) {
            isValid = true;
            System.out.println("Login Success! Loading the menu...");
            break;
        }
    }
    // 遍历完所有账号都没匹配成功再提示错误
    if (!isValid) {
        System.out.println("Invalid username or password, please contact your Database Administrator for support!");
    }

    return isValid;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 18:45:02