J'essaie de créer une routine de vérification de mot de passe, mon problème est que lorsqu'une entrée est entrée, elle passera par chaque instruction if individuellement. J'essaye de redémarrer la validation lorsqu'une condition n'est pas remplie. Pour le moment, il ne passe à l'instruction if suivante que lorsque la condition précédente est remplie, même si c'est une nouvelle entrée. J'essaie essentiellement de faire relancer la boucle lorsque l'une des conditions n'est pas remplie. Pour le moment, il parcourt individuellement. J'ai essayé le multiple suivant. () Pour essayer de revenir au début de la vérification. Merci d'avance.

 import java.util.Scanner;
 


public class passWordCheck {
 
public static void main(String[] args) {
 
String passWord; // Initialize string for the password.
 
Scanner code = new Scanner(System.in);
// Give requirements for a valid password.
System.out.println("1. A code must contain no spaces");
System.out.println("2. A code must have between 5 and 10 characters (inclusive)");
System.out.println("3. A code must begin with \\ and must end with \\");
System.out.println("4. A code must contain at least one lowercase letter and at least one uppercase letter");
System.out.print("Please enter a code: ");
passWord = code.nextLine();
// Do While loop to check all requirement for a valid password are met.
do {
 
if (!firstCharacter(passWord)) {// Check First Character
    System.out.println("Code must start with \\.");
    System.out.println("Code is invalid, Please try again");
    passWord = code.nextLine();
}
if (!lastCharacter(passWord)) {// Check last Character
    System.out.println("Code must end with \\.");
    System.out.println("Code is invalid, Please try again");
    passWord = code.nextLine();
}
if (!hasCorrectLength(passWord)) {// Check password length
    System.out.println("Code must be between 5 and 15 characters in lenth.");
    System.out.println("Code is invalid, Please try again");
    passWord = code.nextLine();
}
if (!hasUpperCharacter(passWord)) {// Check for uppercase Character
    System.out.println("Code must contain at least one uppercase letter.");
    System.out.println("Code is invalid, Please try again");
    passWord = code.nextLine();
}
if (!hasLowerCharacter(passWord)) {// Check for lowercase character
    System.out.println("Code must contain at least one lowercase letter.");
    System.out.println("Code is invalid, Please try again");
    passWord = code.nextLine();
}
 
} while (false);
 
System.out.println("code is valid.");
code.close();
 
}
 
// Methods for checking password requirements
 
public static boolean firstCharacter(String str) {
 
char first = str.charAt(0); // First character of a string
 
if (first == ('\\')) // This verifies there is a \ at the start.
{
return true;
}
return false;
 
}
 
public static boolean lastCharacter(String str) {
 
int n = str.length(); // Finding string length
 
char last = str.charAt(n - 1); // Last character of a string
 
if (last == ('\\')) // This verifies there is a \ at the end.
{
return true;
}
return false;
 
}
 
public static boolean hasCorrectLength(String str) {
 
int n = str.length(); // Finding string length
 
if (n >= 5 || n <= 15) // This verifies the correct length.
{
return true;
}
 
return false;
}
 
public static boolean hasLowerCharacter(String str) {
 
for (int i = 0; i < str.length(); i++) { // For loop to check password for lowercase
char currentCharacter = str.charAt(i);
if (Character.isLowerCase(currentCharacter)) {
return true;
}
}
return false;
 
}
 
public static boolean hasUpperCharacter(String str) {
 
for (int i = 0; i < str.length(); i++) { // For loop to check password for uppercase
char currentCharacter = str.charAt(i);
if (Character.isUpperCase(currentCharacter)) {
return true;
}
 
}
return false;
 
}
 
}
    
0
Leon Kirby 3 nov. 2020 à 15:05

3 réponses

Meilleure réponse

Pour le moment, votre boucle ne fait effectivement rien, car sa condition de boucle n'est jamais remplie, et vous demandez un nouveau mot de passe à chaque fois qu'une de vos vérifications échoue, et continue les vérifications avec le nouveau mot de passe (sans répéter le processus de vérification), et après la dernière vérification, vous continuez avec le mot de passe (éventuellement faux).

Vous devriez faire en sorte que votre condition de boucle true s'exécute indéfiniment, et break; en sortir à la fin si toutes les vérifications se sont déroulées correctement, et continue; la boucle si l'une de vos instructions if s'exécute (ce qui signifie que cette vérification a échoué). Et pour demander un nouveau mot de passe au début et à chaque fois qu'une des vérifications échoue, mettez password = code.nextLine(); comme première instruction de votre boucle, et supprimez toutes les autres instances de celle-ci.

0
Oskar Grosser 3 nov. 2020 à 12:45

Continuez la boucle sur la base d'une valeur. Au lieu d'utiliser while(false), essayez while(isValid)isValid est un booléen qui s'il est vrai si l'une des conditions échoue et faux si toutes les conditions passent.

0
nbirla 3 nov. 2020 à 12:15

Vous devriez ajouter else if instructions à vos conditions de cette façon si l'une d'elles échoue, alors elle passera à la ligne suivante

while(code.hasNextLine()) {
   if (!firstCharacter(passWord)) {// Check First Character
       System.out.println("Code must start with \\.");
       System.out.println("Code is invalid, Please try again");
       passWord = code.nextLine();
   } else if (!lastCharacter(passWord)) {// Check last Character
   
   } //etc
   else {
       System.out.println("code/line is valid.");
   } 
}
0
Andrei Stoicescu 3 nov. 2020 à 12:22