使用密码检查器的布尔逻辑循环有问题

问题描述 投票:0回答:1

我正在尝试创建一个Java程序,该程序检查输入的密码是否至少包含三个小写字母,2个大写字母和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. 现在无论我在测试输入中键入什么内容,它都将完全跳过循环并转到有效密码语句。

在这一点上,我真的很沮丧,可以寻求帮助。

java variables
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.