Java Создание пароля - должен иметь определенные параметры - PullRequest
1 голос
/ 18 июня 2020
• 1000 * Эта программа также должна повторно напоминать пользователю, если требования не выполняются.

У меня проблемы с повторным запуском части процесса, так как я не уверен, как заставить его возобновить работу. Я неправильно считаю?

Код ниже:

     import java.util.Scanner;


    public class ValidatePassword
     {
    public static void main(String[] args)
     {
     Scanner input = new Scanner(System.in);
     int upperCount = 0;
     int lowerCount = 0;
     int digitCount = 0;


     //Greeting

     System.out.println("Setting up your password is easy!");
     System.out.println("The system will prompt if additional parameters are needed.");
     System.out.println("Please enter your preferred password:");

     // System in for password

     String password = input.nextLine();


     // Counting the number of each input
     for (int i = 0; i < password.length(); i++)
        {
        char ch = password.charAt(i);
        if (ch >= 'A' && ch <= 'Z')
           upperCount++;
        else if (ch >= 'a' && ch <= 'z')
           lowerCount++;
        else if (ch >= '0' && ch <= '9')
           digitCount++;
        }

     // Parameter Check

     if (upperCount < 2)
        System.out.println("You must use at least 2 UpperCase Characters"); 
     if (lowerCount < 3)
        System.out.println("You must use at least 3 Lower Case Characters");
     if (digitCount < 1)
        System.out.println("You must use at least 1 Number");          
     if (upperCount > 2 && lowerCount > 3 && digitCount > 1)
        System.out.println("Valid Password");              


  }

}

Ответы [ 4 ]

0 голосов
/ 18 июня 2020

Проблема

В следующей строке вы проверяете только критерии, превышающие следующие:

if (upperCount > 2 && lowerCount > 3 && digitCount > 1)

Решение

Вам необходимо проверить, больше или равно критерии:

if (upperCount >= 2 && lowerCount >= 3 && digitCount >= 1)
0 голосов
/ 18 июня 2020
while (CONDITION) {
    doAThing();
}

или:

do {
    doAThing();
} while (CONDITION);

- это конструкторы java, которые вы ищете. Эти конструкции будут повторять то, что указано в фигурных скобках, до тех пор, пока условие не перестанет выполняться, причем конструкция do / while гарантирует вам хотя бы один цикл, тогда как конструкция while {} будет выполняться ноль раз, если условие не выполняется прямо в Начало. СОСТОЯНИЕ может быть любым; включая 'true', так как вы также можете использовать команду break;, чтобы остановить l oop и продолжить за пределами конструкции (do) / while.

В качестве примечания, требуя, чтобы пароли имели определенные свойства, кроме минимальной длины, - плохая идея. См. Также: рекомендации NIST. Если вы требуете, чтобы пароль содержал заглавную букву, пользователь просто прописывает первую букву. если требуется di git, они добавят «1» в конец. Если требуется специальный символ, они добавят!, Также в конце. Следовательно, эти требования вообще не улучшают энтропию пароля, а просто раздражают / фактически служат для ее уменьшения. Я понимаю, что это домашнее задание, но хорошо осознавать, что с помощью этого упражнения вас приучают к очень плохим привычкам.

0 голосов
/ 18 июня 2020

Вы можете поместить весь код в метод и рекурсивно вызывать себя, когда он недействителен, и ничего не делать, когда он достигает допустимого значения.

public class ValidatePassword {

    public static void main(String[] args) {
        ValidatePassword main = new ValidatePassword();
        main.validatePassword();
    }

    void validatePassword() {

        int upperCount = 0;
        int lowerCount = 0;
        int digitCount = 0;

        //Greeting
        Scanner input = new Scanner(System.in);

        System.out.println("Setting up your password is easy!");
        System.out.println("The system will prompt if additional parameters are needed.");
        System.out.println("Please enter your preferred password:");

        // System in for password

        String password = input.nextLine();


        // Counting the number of each input
        for (int i = 0; i < password.length(); i++) {
            char ch = password.charAt(i);
            if (ch >= 'A' && ch <= 'Z')
                upperCount++;
            else if (ch >= 'a' && ch <= 'z')
                lowerCount++;
            else if (ch >= '0' && ch <= '9')
                digitCount++;
        }

        // Parameter Check
        if (upperCount < 2) {
            System.out.println("You must use at least 2 UpperCase Characters");
            validatePassword();
        } else if (lowerCount < 3) {
            System.out.println("You must use at least 3 Lower Case Characters");
            validatePassword();
        } else if (digitCount < 1) {
            System.out.println("You must use at least 1 Number");
            validatePassword();
        } else if (upperCount > 2 && lowerCount > 3 && digitCount > 1) {
            System.out.println("Valid Password");
        }
    }
}
0 голосов
/ 18 июня 2020

Вы можете использовать do-while l oop следующим образом:

Scanner input = new Scanner(System.in);
boolean valid = false;
do {
    int upperCount = 0;
    int lowerCount = 0;
    int digitCount = 0;

    //Greeting
    System.out.println("Setting up your password is easy!");
    System.out.println("The system will prompt if additional parameters are needed.");
    System.out.println("Please enter your preferred password:");

    // System in for password
    String password = input.nextLine();

    // Counting the number of each input
    for (int i = 0; i < password.length(); i++){
        char ch = password.charAt(i);
        if (ch >= 'A' && ch <= 'Z')
            upperCount++;
        else if (ch >= 'a' && ch <= 'z')
            lowerCount++;
        else if (ch >= '0' && ch <= '9')
            digitCount++;
    }

    // Parameter Check
    if (upperCount < 2)
        System.out.println("You must use at least 2 UpperCase Characters"); 
    if (lowerCount < 3)
        System.out.println("You must use at least 3 Lower Case Characters");
    if (digitCount < 1)
        System.out.println("You must use at least 1 Number"); 
    valid = (upperCount >= 2 && lowerCount >= 3 && digitCount >= 1);
    if (valid)
        System.out.println("Valid Password");              
}while(!valid);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...