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

Java密码校验程序单个测试用例失败问题排查求助

问题排查:Java密码验证程序测试用例失败

错误点1:数字统计逻辑错误

你的循环里判断数字的代码写错了:

if (Character.isDigit(i)) {

这里的i是循环的索引值(整数),不是字符串中的字符。正确的写法应该是先通过checkStr.charAt(i)获取字符串对应位置的字符,再判断是否为数字:

if (Character.isDigit(checkStr.charAt(i))) {

这个错误直接导致数字统计完全错误——比如测试用例63198207s里实际有8个数字,但你的代码根本没统计到,counter一直为0,后续逻辑因此错误判定为Valid。

错误点2:验证逻辑不符合需求

需求明确:仅当字符串包含少于6个数字且长度≤10时,输出Valid,其余情况都输出Invalid。
你的代码逻辑存在两处漏洞:

  • 当字符串长度≤10但数字数量≥6时,代码没有修改goodPassword的初始值(true),导致错误输出Valid;
  • 你写的counter <=6不符合「少于6个」的要求,应该是counter < 6。

修正后的逻辑可以简化为:先默认设为Invalid,仅当同时满足两个条件时改为Valid,这样所有不符合要求的情况都会被正确判定:

goodPassword = false;
if (checkStr.length() <= 10 && counter < 6) {
    goodPassword = true;
}

修正后的完整代码

import java.util.Scanner;

public class ValidInvalid {
   public static void main(String[] args) {
      Scanner scnr = new Scanner(System.in);
      String checkStr;
      Boolean goodPassword = false; // 初始设为Invalid
      int counter = 0;
  
      checkStr = scnr.nextLine();

      for (int i = 0; i < checkStr.length(); i++) {
            if (Character.isDigit(checkStr.charAt(i))) {
               counter++;
            }
       }
  
      // 只有同时满足两个条件才设为Valid
      if (checkStr.length() <= 10 && counter < 6) {
         goodPassword = true;
      }

      System.out.println(goodPassword ? "Valid" : "Invalid");
   }
 }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:47:48