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

生成合规强密码的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:06:02