Member 13676546 Ответов: 2

Проверка пароля ( логический метод)


напишите логический метод , который получает строку и проверяет , имеет ли она по крайней мере 10 символов , один верхний регистр, один нижний регистр, одно число и только буквенно-цифровой , и возвращает логическое значение true или false, в основном методе мы можем проверить ответ

Что я уже пробовал:

import java.util.Scanner;
public class PasswordValidator {
  public static void main (String[] args){
    Scanner input= new Scanner (System.in);
    //System.out.println
      boolean answer1 =(isSecurePassword( input.nextLine()));
      System.out.println(answer1);
    /*String pass1 = "This is a secure password";
    String pass2 = "This is not a secure password";
    
    boolean answer1 = isSecurePassword(pass1);
    boolean answer2 = isSecurePassword(pass2);
    
    System.out.println("answer1 = " + answer1);
    System.out.println("answer2 = " + answer2);*/

    
  }
  public static boolean isSecurePassword (String password){
  
   
    int i;
    for (i=0;i<password.length();i++){
      
    if (i!=10)
    {
   
    return false;
    
    }
    
      
  }
  
  }
}

2 Ответов

Рейтинг:
6

CPallini

Ваша реализация (та, что в комментарии) полна ошибок. Надеюсь, я все исправил. Попробуй

import java.util.Scanner;

public class PasswordValidator
{
  public static void main (String[] args)
  {
    Scanner input = new Scanner (System.in);
    boolean isSecure =isSecurePassword( input.nextLine());
    System.out.println(isSecure);
  }

  public static boolean isSecurePassword (String password)
  {
    if ( password.length() < 10) return false;

    boolean uppercase=false;
    boolean lowercase=false;
    boolean digit=false;

    for(char c : password.toCharArray())
    {
      if (c >='a'&& c <='z')
        lowercase = true;
      else if (c >='A'&& c <='Z')
        uppercase =true;
      else if ( c >='0' && c<='9')
        digit = true;
    }
    return (uppercase && lowercase && digit);
  }
}


Member 13676546

большое спасибо за его отладку ( правильно ли так говорить?), единственное, что я не могу использовать массив.

CPallini

Добро пожаловать.

Member 13676546

как мы можем переписать его без использования массива ?

CPallini

for(char c : password.toCharArray())

это то же самое, что
for (int i = 0; i < password.length(); ++i)
{
  char c = password.charAt(i);

Member 13676546

еще раз спасибо за объяснение. это было ясно и полезно.

CPallini

Добро пожаловать снова. :-)

Рейтинг:
0

OriginalGriff

Прочтите вопрос: это делает довольно очевидным, что вы должны делать.
1) читать в строке.
2) Проверьте, что он имеет 10 символов. Если это не так, верните false.
3) объявите три логические переменные: hasUpperCase, hasLowerCase, hasDigit и установите для них все значения false.
4) петля через строку, глядя на каждый символ по очереди.
4.1) если он прописной, установите hasUpperCase в true.
4.2) В противном случае, если он строчный, установите hasLowerCase в true.
4.3) В противном случае, если это цифра, установите hasDigit в true.
4.4) В противном случае верните false;
5) после цикла верните hasUpperCase, hasLowerCase и hasDigit


Member 13676546

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

OriginalGriff

Это потому, что вы не делаете то, что я предложил: посмотрите на свой код и мысленно проследите его (или используйте отладчик) - он фундаментально испорчен, если вы посмотрите на все внимательно.

OriginalGriff

Я хотел сказать: "какие ошибки?" но потом я прочитал код ... ах милый...

Хватит гадать. Начинать думать. Вернитесь к тому, что я сказал вначале, и прочитайте это снова. Это то, что вы делаете?
Подсказка: https://stackoverflow.com/questions/2451650/how-do-i-apply-the-for-each-loop-to-every-character-in-a-string

Member 13676546

спасибо за ссылку, однако, я новичок, и я только что изучил условный цикл и немного струнных очень основ.. не что-нибудь еще, Цель упражнения состоит в том, чтобы написать метод и вызвать его. мы не можем использовать сканер в методе, но мы можем проверить результат ( который должен быть Булевым типом) через основной метод. поэтому мне нужно написать программу для проверки пароля с основами.

OriginalGriff

Вам нужно получить доступ к каждому символу индивидуально, чтобы узнать, что это за символ: это означает цикл и либо конструкцию "для каждого", либо индекс массива - как показывает ссылка.
Я предлагаю вам просмотреть свои заметки о курсе и посмотреть, с какими циклами вы познакомились: без одного вы не можете выполнить упражнение, поэтому я подозреваю, что вы просто пропустили их, когда были в классе по какой-то причине.

Member 13676546

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