密码检查器陷入无限循环问题排查及其他错误咨询
问题排查与修复方案
一、无限循环的根本原因
你的while循环缺少大括号,导致只有System.out.println("please enter a password");这一行被当作循环体执行。程序会无限重复打印这句话,永远执行不到后续的密码输入和校验逻辑,correct变量始终为false,循环无法终止。
二、校验逻辑的核心错误
- 多余且错误的for循环:你用for循环遍历密码字符,但只要第一个字符不是
!,就直接进入else分支输出错误并break,根本不会检查整个密码是否包含!,也不会正确判断长度。就算密码里有!但不在第一个位置,程序也会直接判定错误。 - 条件逻辑颠倒且错误:你当前的判断条件是“遍历到的字符是
!且 密码长度大于8”,但正确的逻辑应该是“密码长度大于8 且 密码中至少包含一个!”,两者的逻辑顺序和判断方式完全错误。 - else分支的错误触发:只要第一个字符不符合,就直接输出错误并终止循环,忽略了后续可能符合条件的字符。
三、其他代码问题
- 方法名不符合Java命名规范:
ValidChecker应改为小驼峰式的validChecker。 - Scanner资源未关闭:使用完Scanner后应调用
scanner.close()释放资源。
四、修复后的代码
public static void validChecker() { Scanner scanner = new Scanner(System.in); boolean correct = false; while (!correct) { // 简化条件写法,等价于correct == false System.out.println("please enter a password"); String pass = scanner.next(); // 正确的校验逻辑:长度大于8 且 包含至少一个! if (pass.length() > 8 && pass.contains("!")) { System.out.println("this password is correct"); correct = true; } else { System.out.println("this password is incorrect"); } } scanner.close(); }
内容的提问来源于stack exchange,提问作者Dylan Andrews
相关产品推荐
相关产品推荐

