PasswordChecker в Java - PullRequest
       14

PasswordChecker в Java

0 голосов
/ 22 февраля 2019

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

1.Цифр до тех пор, пока не будет введен действительный пароль.

Действительный пароль:

должен содержать как минимум 1 заглавную букву.

должно содержать не менее 1 строчной буквы.

должно быть не менее 6 символов.

должно содержать не менее 1 цифры.

должно содержать только буквы, цифры илиunderscore

Мне нужна помощь с оператором if, который устанавливает для hasValidCharacters значение true, а для isValid - значение true, чтобы я мог отобразить правильный пароль.

     String password;
     boolean isValid = false;
     boolean hasUpperCase = false;
     boolean hasLowerCase = false;
     boolean hasDigit = false;
     boolean hasValidCharacters = false;
     boolean hasLength = false;

     //Loop until a valid password is entered
     System.out.print("Enter password: ");
     password = kb.nextLine();
     char ch;
     for(int i=0;i<password.length();i++)
     {
       ch = password.charAt(i);

        //Display all appropriate error messages
        if(Character.isUpperCase(ch))
          hasUpperCase=true;
        else  
          System.out.println("ERROR:  should have at least 1 uppercase letter.");
        if(Character.isLowerCase(ch))
          hasLowerCase=true;
        else    
          System.out.println("ERROR: should have at least 1 lowercase letter.");
        if(password.length()>6)
          hasLength=true;
        else  
          System.out.println("ERROR: should be at least 6 characters long.");
        if(Character.isDigit(ch))  
          hasDigit=true;
        else  
          System.out.println("ERROR: should have at least 1 digit.");
        if()
          hasValidCharacters=true;
        else  
          System.out.println("ERROR: should only contain letters, digits or underscore");



        //Display password when valid   
        if(isValid=true)
          System.out.println(password + " is valid. ");
        else
          System.out.print("Enter valid password: ");
          password = kb.nextLine();  

     }
  }
}

Ответы [ 4 ]

0 голосов
/ 22 февраля 2019

Вы должны взглянуть на эту статью, она объясняет, как проверить пароль и даже как проверить наличие специальных цифр. Посмотрите 2-ую половину статьи под заголовком "Core java" https://www.baeldung.com/java-lowercase-uppercase-special-character-digit-regex

Я также пытался просмотреть ваш код, но получал сообщение об ошибке в пустом операторе if "if ()" в цикле for.

0 голосов
/ 22 февраля 2019

Множество способов сделать это.Не хочу подавать с ложки, так что вот мои наблюдения.

  • Настройка логических переменных для каждого "условия" (похоже, вы уже сделали это)
  • Вы можетевызовите password.length() вне цикла только один раз (вы делаете это каждую итерацию)
  • Удалите операторы печати из цикла.Помните, что этот цикл будет выполняться X раз (где X - длина), и теоретически каждый символ должен удовлетворять только одному условию.Это означает, что он напечатает все другие операторы else.
0 голосов
/ 22 февраля 2019

Я бы также предложил обернуть вашу логику в цикл «do while», чтобы вы могли снова предложить пользователю ввести его / ее пароль, пока пароль недействителен.В противном случае ваша программа будет остановлена, и ее придется запускать каждый раз, когда пользователь вводит неквалифицированный пароль.

boolean valid = false;

do{
  //ask user for input

  //validate the input

}while(!valid);
0 голосов
/ 22 февраля 2019

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

if (hasUpperCase && hasLowerCase && hasDigit && hasLength) hasValidCharacters = true;

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

...