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

密码检查器陷入无限循环问题排查及其他错误咨询

问题排查与修复方案

一、无限循环的根本原因

你的while循环缺少大括号,导致只有System.out.println("please enter a password");这一行被当作循环体执行。程序会无限重复打印这句话,永远执行不到后续的密码输入和校验逻辑,correct变量始终为false,循环无法终止。

二、校验逻辑的核心错误

  1. 多余且错误的for循环:你用for循环遍历密码字符,但只要第一个字符不是!,就直接进入else分支输出错误并break,根本不会检查整个密码是否包含!,也不会正确判断长度。就算密码里有!但不在第一个位置,程序也会直接判定错误。
  2. 条件逻辑颠倒且错误:你当前的判断条件是“遍历到的字符是! 且 密码长度大于8”,但正确的逻辑应该是“密码长度大于8 且 密码中至少包含一个!”,两者的逻辑顺序和判断方式完全错误。
  3. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:16:18