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

