2017-01-07 3 views
0

Also ich versuche, dies zu erhalten, Benutzereingaben als String zu übernehmen und das Passwort überprüfen, um sicher diese beiden Dinge zu machen:Java Probleme zu überprüfen, ob Kennwortzeichenfolge gültig ist

  1. Das Passwort ist ein Minimum an 8 Charaktere.
  2. Das Passwort enthält nur Buchstaben und Zahlen.

Jetzt ist das Problem so: das Passwort für mindestens 8 Zeichen Überprüfung funktioniert, aber die Überprüfung es sicher, dass es funktioniert nur Buchstaben und Zahlen enthalten, um nicht. Es endet einfach, ohne eine einzige Nachricht zu geben, wenn die Mindestanzahl von Zahlen/Buchstaben eingegeben wird. Allerdings, wenn es ein Zeichen sieht das kein Buchstabe oder eine Zahl ist, wird es dieses aus drucken:

Bitte geben Sie ein Passwort:

###

Passwort kann nur Buchstaben und Zahlen enthalten.

Das Passwort darf nur Buchstaben und Zahlen enthalten.

Das Passwort darf nur Buchstaben und Zahlen enthalten.

Passwort wird akzeptiert!

Was es ausgeben sollte dies:

Bitte geben Sie ein Passwort: ###

Passwort nur Buchstaben und Zahlen enthalten.

oder

Bitte geben Sie ein Passwort: test1234

Passwort akzeptiert!

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!"); 
    } 
    } 

Jede Hilfe mit diesem wäre toll.

+0

Hilft dies: http://stackoverflow.com/questions/13674449/checking-password-code? – ppasler

+1

Sobald Sie ein ungültiges Zeichen gefunden haben, sollten Sie value auf false setzen und aus der Schleife ausbrechen. Andernfalls riskieren Sie, dass das Flag wieder auf "true" gesetzt wird. –

Antwort

0

Sie könnten den Code ein wenig vereinfachen, zuerst mit valid starten, indem Sie die password.length() überprüfen; Testen Sie dann jedes Zeichen im Passwort (stoppen Sie, falls eines ungültig ist). Überprüfen Sie abschließend, ob das Passwort gültig war, bevor Sie Ihre akzeptierte Nachricht anzeigen. Wie,

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

der Hauptfehler in diesem Prüfcodes ist die while-Schleife, wenn Sie ein falsches Zeichen sehen, gibt es keine Notwendigkeit, die Schleife fortzusetzen, einfach tun Sie diese Art von Kontrollen auf diese Weise:

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 
} 
Verwandte Themen