首页 > 解决方案 > 带有密码检查器的布尔逻辑循环有问题

问题描述

我正在尝试创建一个 Java 程序来检查输入密码是否至少包含三个小写字母、两个大写字母和 1 个数字。这是我到目前为止所拥有的:

Scanner inputDevice = new Scanner(System.in);
    boolean valid= false;
    String password;
    do{

    System.out.print("Enter a password that contains at least 2 uppercase letters, three lowercase letters, and at least 1 digit: ");
    password = inputDevice.nextLine();
    boolean Upper;
    boolean Lower;
    boolean Digit;
    int UpperCount=0;
    int LowerCount=0;
    int DigitCount=0;
    for(int i=0; i<password.length(); i++){
        if (Character.isUpperCase(password.charAt(i)));
            UpperCount++;}
        if (UpperCount<2)
            Upper=false;
        else
            Upper=true;
    for(int i=0; i<password.length(); i++){
        if (Character.isLowerCase(password.charAt(i)));
            LowerCount++;}
        if (LowerCount<3)
            Lower=false;
        else
            Lower=true;
    for(int i=0; i<password.length(); i++){
        if (Character.isDigit(password.charAt(i)));
            DigitCount++;}
        if (DigitCount<1)
            Digit=false;
        else
            Digit=true;
    if ((Digit == false) || (Upper == false) || (Lower == false))
        System.out.print("The password did not have enough of the following:");
    if (Upper == false)
        System.out.print("\nuppercase letters");
    if (Lower == false)
        System.out.print("\nlowercase letters");
    if (Digit ==false)
        System.out.print("\ndigits");
    if ((Digit==true)&&(Upper==true)&&(Lower==true))
        valid=true;

    }while(valid!=true);  
    System.out.println("Valid password");

我已经和它搏斗了一段时间。我遇到的一些问题是:

  1. 返回循环顶部时计数未重置为零。
  2. 根据我的测试运行,循环无法识别数字或输入完全错误的输出。
  3. 现在它只是完全跳过循环并进入有效密码语句,无论我在输入中输入什么进行测试。

在这一点上,我真的很沮丧,可以使用一些帮助。

标签: javavariables

解决方案


摆脱你的分号。其他 2 个 if 语句if (Character.isUpperCase(password.charAt(i)));应该是相同的。if (Character.isUpperCase(password.charAt(i)))此外,作为可读性的旁注,我建议将括号移到新行,以便更容易查看 for 循环的结束位置。最初我以为每个 for 循环都有 3 个 if 语句,但后来我看到括号隐藏在你的第一个 if 语句中


推荐阅读