2017-01-07 8 views
0

Так что я пытаюсь получить это принимать пользовательский ввод в виде строки и проверьте пароль, чтобы убедиться, что из этих двух вещей:Java беда, если строка пароля действительна

  1. пароля представляет собой минимум 8 символов.
  2. Пароль содержит только буквы и цифры.

Теперь проблема заключается в следующем: Проверка пароля минимум 8 символов работает, но проверка его, чтобы убедиться, что содержит только буквы и цифры не работают. Он просто заканчивается, не указывая ни одного сообщения, если введено минимальное количество цифр/букв. Однако, если он видит, что символ не является буквой или номер, он будет печатать эту:

Пожалуйста, введите пароль: ###

Пароль может содержать только буквы и цифры.

Пароль может содержать только буквы и цифры.

Пароль может содержать только буквы и цифры.

Пароль принят!

Что следует выводить так:

Пожалуйста, введите пароль: ###

Пароль может содержать только буквы и цифры.

или

Пожалуйста, введите пароль: test1234

Пароль принят!

password.java  
    package Password; 
    import java.util.Scanner; 

    public class Password { 

    public static void main(String[]args) 
    { 

    Scanner input = new Scanner (System.in); 
    boolean valid = true; 
    System.out.println("Please enter a password:"); 
    String password = input.nextLine(); 
    int i = 0; 
    //declares i as the counter varible to control the loop and initializes it to 0 

    if((password.length() < 8)) //check the passwords length and make sure it's a minimum of 8 characters 
    { 
    System.out.println("Password must have at least 8 characters."); 
    valid = false; 
    } 
    //loops the code below it for the length of i until the password length is reached 
    while(i < password.length()) 
    { 
    if ((password.charAt(i)>='a' && password.charAt(i)<='z') || (password.charAt(i)>='A' && password.charAt(i)<='Z') ||(password.charAt(i)>='0' && password.charAt(i)<='9')) 
    //loop through all the characters in the string entered and make sure they only consist of letters and numbers 
     valid = true; 
    else 
    { 
     System.out.println("Password can only contain letters and numbers."); 
     valid = false; 
    } 
    i++; 
    //add an iteration to the loop 
    } 

    if(!valid == true) 
    System.out.println("Password accepted!"); 
    } 
    } 

Любая помощь вообще с этим будет замечательной.

+0

Помогает ли это: http://stackoverflow.com/questions/13674449/checking-password-code? – ppasler

+1

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

ответ

0

Вы можете немного упростить код, сначала начните с valid, проверив password.length(); затем проверьте каждый символ в пароле (остановка, если таковые имеются). Затем, наконец, проверьте, был ли пароль действительным, прежде чем отображать принятое сообщение. Мол,

Scanner input = new Scanner(System.in); 
System.out.println("Please enter a password:"); 
String password = input.nextLine(); 
boolean valid = password.length() >= 8; 

if (!valid) { 
    System.out.println("Password must have at least 8 characters."); 
} else { 
    for (char ch : password.toCharArray()) { 
     if (!Character.isLetter(ch) && !Character.isDigit(ch)) { 
      System.out.println("Password can only contain letters and numbers."); 
      valid = false; 
      break; 
     } 
    } 
} 
if (valid) { 
    System.out.println("Password accepted!");   
} 
0

главная ошибка в этом коде проверки является циклом в то время, когда вы видите неверный символ нет необходимости продолжать цикл, просто вы делаете такого рода проверки таким образом:

String toCheck;  //the string to check some criteria 
boolean valid = true; // we assume that nothing wrong happen till now 

for(int i=0;i<toCheck.length();i++){ //loop over the characters 
    if(/*condition of wrong case*/){ 
     valid = false;    //mark that something wrong happen 
     break;      //exit the loop no need to continue 
    } 
} 

if(valid){ 
    //nothing wrong happen 
} else { 
    //something wrong happen 
}