生成合规强密码的Java代码出现运行时错误,如何修复?
修复强密码合规性检查的Java代码
看起来你的代码片段截断了,而且能看到一处明显的语法错误——循环条件里的k&l肯定是手滑打错了,应该是k<4对吧?另外原代码的逻辑应该是要检查密码是否覆盖了数字、小写字母、大写字母、特殊字符这四类要求,然后计算需要补充的字符数,同时还要保证最终密码长度至少为6位。我帮你把完整的修复代码写出来,并且解释关键部分:
修复后的完整代码
import java.util.*; public class Solution { static int minimumNumber(int n, String password) { // 标记四类字符是否都存在 boolean hasNumber = false; boolean hasLower = false; boolean hasUpper = false; boolean hasSpecial = false; String numbers = "0123456789"; String lower_case = "abcdefghijklmnopqrstuvwxyz"; String upper_case = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; String special_characters = "!@#$%^&*()-+"; // 遍历密码的每个字符,检查所属类别 for (char c : password.toCharArray()) { if (numbers.indexOf(c) != -1) { hasNumber = true; } else if (lower_case.indexOf(c) != -1) { hasLower = true; } else if (upper_case.indexOf(c) != -1) { hasUpper = true; } else if (special_characters.indexOf(c) != -1) { hasSpecial = true; } } // 统计缺失的类别数量 int missingTypes = 0; if (!hasNumber) missingTypes++; if (!hasLower) missingTypes++; if (!hasUpper) missingTypes++; if (!hasSpecial) missingTypes++; // 最终需要补充的字符数:取缺失类别数和(6-当前长度)中的较大值 // 因为既要补全类别,又要满足长度至少6位 return Math.max(missingTypes, 6 - n); } public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); String password = in.next(); int answer = minimumNumber(n, password); System.out.println(answer); } }
关键修复和优化点
- 修正了你代码里的语法错误:原代码中
for(int k=0;k&l...是明显的输入错误,换成了更清晰的字符遍历检查逻辑,避免嵌套循环的冗余。 - 用四个布尔变量替代原代码的数组标记,逻辑更直观,容易维护。
- 补充了核心逻辑:计算需要补充的字符数时,要同时考虑缺失的字符类别数量和密码长度是否达标(至少6位),取两者的最大值——比如如果密码长度已经是5,但只缺失1类字符,那只需要补1个字符(同时满足长度和类别);如果密码长度是3且缺失2类,那需要补3个字符(因为6-3=3比2大)。
- 完善了main方法,方便测试运行。
示例测试
比如:
- 输入密码
abc(长度3):缺失数字、大写、特殊字符,共3类。6-3=3,所以返回3,补充后比如abc1A!就符合要求。 - 输入密码
Ab1(长度3):缺失特殊字符,共1类。6-3=3,所以返回3。 - 输入密码
Abcdef(长度6):缺失数字和特殊字符,共2类,返回2。
内容的提问来源于stack exchange,提问作者Sachithra Dilshan
相关产品推荐
相关产品推荐

