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

