2016-11-17 2 views
-2

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

Инструкции

  1. Напишите программу, которая предлагает пользователю ввести пароль.
  2. Создайте логическую переменную с именем valid и установите ее в true. Если какой-либо из этих тестов ниже, установите значение true.
  3. Проверьте пароль, если он содержит не менее 8 символов. Если это не так, отобразите сообщение, «Пароль должен содержать не менее 8 символов».
  4. Проверьте пароль, чтобы увидеть, состоит ли он только из букв и цифр. Для этого вам нужно будет пропустить все символы в строке. Символ с является буквой цифры, если это выражение истинно:

    («а» < = с & & с < = «г») || ('A' < = c & & c < = 'Z') || («0» < = с & & с < = «9»)

, если это даже не так, перерыв с вашего цикла и отобразить сообщение «Пароль должен содержать только буквы и цифры» 5. Если в конце программы все еще верно, верните сообщение «Пароль принят!».

Мой код

import java.util.Scanner; 
public class PasswordVerification { 

    public static void main(String[] args) { 
//  Creates a scanner 
     Scanner sc = new Scanner(System.in); 
     boolean valid = false; 
     String password; 


//  Asks user to enter password 
     System.out.print("Please enter password and then hit enter:"); 
     password = sc.nextLine(); 

//  Checks to see if password is at least 8 characters. 
     if (password.length()<8) 
      { 
       valid = false; 
       System.out.println("Password must have at least 8 characters"); 
      } 

//  Checks each character to see if it is acceptable. 
     for (int i = 0; i < password.length(); i++){ 
        char c = password.charAt(i); 

        if (  ('a' <= c && c <= 'z') // Checks if it is a lower case letter 
          || ('A' <= c && c <= 'Z') //Checks if it is an upper case letter 
          || ('0' <= c && c <= '9') //Checks to see if it is a digit 
        ) 
        { 

         valid = true; 
        } 

        else 
        { 
         // tells the user that only letters & digits are allowed 
         System.out.println("Only letter & digits are acceptable."); 
         valid = false; 
         break; 
        } 

     } 

     // if the password is valid, tell the user it's accepted 
     System.out.println("Password Accepted"); 
     } 


} 

Итак, есть инструкции и мой код у меня до сих пор. Я SOOOOO близко к выполнению. У меня просто проблемы с четвертой частью. Таким образом, ожидаемый результат должен быть:

Please enter a password: abc 
Password much have at least 8 characters 
Please enter a password: abcd1234$ 
Password must only contain letter and digits 
Please enter a password: #### 
Password must have at least 8 characters 
Password must only contain letters and digits 
Please enter a password: abcd1234 
Password accepted! 

Когда я тип а это то, что я получаю:

Please enter password and then hit enter:abc 
Password must have at least 8 characters 
Password Accepted 

Когда я делаю это программа заканчивается! Не мог бы кто-нибудь помочь мне в этом, пожалуйста? Заранее спасибо. =) Кроме того, это класс программирования Java I.

+1

Regex может быть очень полезно для части 4. Есть ли причина, по которой вы ее не используете? Пример: http://stackoverflow.com/questions/11241690/regex-for-checking-if-a-string-is-strictly-alphanumeric – Joe

+2

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

+0

@joe Плакат, безусловно, является полным новичком. Regex - это то, что нужно решать позже. – slim

ответ

2

Как @cralfaro заявил, что вам нужно повторить процесс, если пароль неверен:

import java.util.Scanner; 
public class PasswordVerification { 

    public static void main(String[] args) { 
     //  Creates a scanner 
     Scanner sc = new Scanner(System.in); 
     boolean valid = false; 
     String password; 

     do { // start a loop 
      //  Asks user to enter password 
      System.out.print("Please enter password and then hit enter:"); 
      password = sc.nextLine(); 

      //  Checks to see if password is at least 8 characters. 
      if (password.length()<8) 
      { 
       valid = false; 
       System.out.println("Password must have at least 8 characters"); 
       continue; // skip to next iteration 
      } 

      //  Checks each character to see if it is acceptable. 
      for (int i = 0; i < password.length(); i++){ 
       char c = password.charAt(i); 

       if (  ('a' <= c && c <= 'z') // Checks if it is a lower case letter 
         || ('A' <= c && c <= 'Z') //Checks if it is an upper case letter 
         || ('0' <= c && c <= '9') //Checks to see if it is a digit 
       ) 
       { 

        valid = true; 
       } 
       else 
       { 
        // tells the user that only letters & digits are allowed 
        System.out.println("Only letter & digits are acceptable."); 
        valid = false; 
        break; 
       } 

      } 
     } while(!valid); // verify if the password is valid, if not repeat the process 

     // if the password is valid, tell the user it's accepted 
     System.out.println("Password Accepted"); 
    } 


} 

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

EDIT: Благодаря комментарию GC_, проблема заключалась в том, что я пропустил оператор continue в первой проверке.

+1

Должно иметься продолжение при первой проверке. –

+0

Я пробовал ваш код, и он все еще не работает, как если бы он ... Программа завершает ли пароль неверным или нет. Но я думаю, что это должно сработать! Я что-то упускаю? – BlazeRyder

+0

@GC_ спасибо за комментарий, с продолжением он должен работать, редактируя прямо сейчас! – aleb2000

-1

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

if(valid==true) { 
    System.out.println("Password Accepted"); 
} 

EDIT: Вы также можете добавить это.

else { 
    System.out.println("Password Denied"); 
} 
+0

Почему голос? –

+0

Я как раз собирался спросить об этом! Пожалуйста, объясните downvotes. Я искренне верю, что это правильный ответ. – Joe

+0

О, он действительно хочет его в петле. Кроме того, он должен быть действительным = действительный & & true; –

0

Ваша проблема IST эта часть кода:

if ( ('a' <= c && c <= 'z') // Checks if it is a lower case letter 
    || ('A' <= c && c <= 'Z') //Checks if it is an upper case letter 
    || ('0' <= c && c <= '9') //Checks to see if it is a digit 
    ) { valid = true; } 

Здесь вы сбрасываете valid к true, даже если первый чек с длиной быть меньше, чем 8 уже не удалось. Таким образом, abc потерпит неудачу 3. и распечатайте Password must have at least 8 characters, который в порядке. Затем он пройдет 4., сбрасывает действительность до true и печатает Password Accepted.

Так что вы хотите заменить if (...) { valid = true; } else { ... } часть на

if (!(// if the character is none of the options below, print error 
     ('a' <= c && c <= 'z') // Checks if it is a lower case letter 
    || ('A' <= c && c <= 'Z') //Checks if it is an upper case letter 
    || ('0' <= c && c <= '9') //Checks to see if it is a digit 
    )) { 
     // tells the user that only letters & digits are allowed 
     System.out.println("Only letter & digits are acceptable."); 
     valid = false; 
     break; 
    } 

Edit: Кроме того, вы должны сначала установить boolean valid = true; вместо false, как вы хотите, чтобы установить его в false только если это не условие. Тогда в конце кода добавьте условие проверки valid вокруг последней выходной линии, как

if(valid) { 
    System.out.println("Password Accepted"); 
} 
+0

Когда я помещаю это в свой код, запустите его и поместив abc в качестве пароля, это то, что я получаю: введите пароль, а затем нажмите enter: abc Пароль должен иметь не менее 8 символов Пароль принимается! – BlazeRyder

+0

Извините, я пропустил эту часть, я отредактировал свое решение – Aracurunir

0

немного грязный, но попробуйте это:

public static void main(String[] args) { 
//  Creates a scanner 
Scanner sc = new Scanner(System.in); 
boolean valid = false; 
String password; 


//  Asks user to enter password 
while(true){ 
System.out.print("Please enter password and then hit enter:"); 
password = sc.nextLine(); 

//  Checks to see if password is at least 8 characters. 
if (password.length()<8) 
    { 
     valid = false; 
     System.out.println("Password must have at least 8 characters"); 
    } 
else { 

//  Checks each character to see if it is acceptable. 
for (int i = 0; i < password.length(); i++){ 
      char c = password.charAt(i); 

      if (  ('a' <= c && c <= 'z') // Checks if it is a lower case letter 
        || ('A' <= c && c <= 'Z') //Checks if it is an upper case letter 
        || ('0' <= c && c <= '9') //Checks to see if it is a digit 
      ) { 
       valid = true; 
      } else { 
       System.out.println("Password denied"); 
       System.out.println("Only letter & digits are acceptable."); 
       valid = false; 
       break; 
      } 


} 

if (valid == true) { 
System.out.println("Password accepted"); 
    break; 
     }    
} 
} 
} 
+0

Кажется, что это работает с циклом, но это не работает. Когда я набираю abc, он работает так, как ожидалось, но когда я набираю abcd1234 $, он говорит, что пароль принят. Но это не должно быть так, потому что оно должно быть принято только в том случае, если оно имеет 8 символов (что он делает), и все символы - буква и цифры (что является ложным из-за $). Это результат в eclipse: Пожалуйста, введите пароль и затем нажмите enter: abc Пароль должен иметь не менее 8 символов Пожалуйста, введите пароль, а затем нажмите ввод: abcd1234 $ Пароль принимается – BlazeRyder

+0

Обновлено. Попробуйте снова – Cristophs0n

Смежные вопросы