У меня есть java-код для ввода пароля по определенным правилам

Некоторые веб-сайты устанавливают определенные правила для паролей. Я пишу метод, который проверяет, является ли строка допустимым паролем.

Правила пароля таковы:

  1. Пароль должен содержать не менее восьми символов
  2. Пароль состоит только из букв и цифр
  3. Пароль должен содержать не менее двух цифр

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

Это мой код ниже:

import java.util.Scanner; 


public class practice {
  public static void main(String[] args) {

  System.out.print("Enter a password");
  Scanner input = new Scanner(System.in);

  String password = input.nextLine();
  boolean isCorrect = checkPassword(password);

  if(isCorrect)
  {
     System.out.println("Valid Password");
  }
  else 
  {
     System.out.println("Invalid Password");
  }
}

//this method checks the password
public static boolean checkPassword(String password)
{
  int countDigit = 0;

  if (password.length() >=8 ){
      return false;
      } 
  for(int i = 0; i <password.length(); i++)
  {
        if(!(Character.isLetterOrDigit(password.charAt(i))))
        {
           return false;
        }
     }

for(int i = 0; i<password.length(); i++){
      if((Character.isDigit(password.charAt(i)))){
         countDigit = countDigit + 1;
      }
     }
if (countDigit >= 2){
  return true;
}

else 
return false;

  }
   }

person Andrey    schedule 12.09.2017    source источник
comment
Вам не всегда нужен отладчик для отладки. Я бы начал с вывода уникального сообщения в каждой строке return false;, чтобы увидеть, какое из них срабатывает.   -  person D M    schedule 12.09.2017
comment
да только что разобрался..   -  person Andrey    schedule 12.09.2017
comment
Рад слышать это.   -  person D M    schedule 12.09.2017


Ответы (1)


Ошибка здесь:

if (password.length() >=8 ){
    return false;
}

Здесь вы говорите, что если пароль длиннее или равен 8 символам, пароль недействителен, что является полной противоположностью требованию. Измените его на:

if (password.length() < 8 ){
    return false;
} 

Кроме того, вы можете уменьшить количество циклов for, чтобы сделать код быстрее. Вы можете подсчитать количество цифр и проверить isLetterOrDigit в том же цикле for:

    int countDigit = 0;

    if (password.length() < 8) {
        return false;
    }
    for (int i = 0; i < password.length(); i++) {
        if (!(Character.isLetterOrDigit(password.charAt(i)))) {
            return false;
        }
        if ((Character.isDigit(password.charAt(i)))) {
            countDigit = countDigit + 1;
        }
    }
    if (countDigit >= 2) {
        return true;
    } else {
        return false;
    }
person Sweeper    schedule 12.09.2017