2017-04-10 1 views
-2

Je veux écrire un programme qui vérifie le mot de passe inséré pour:pour la validation du mot de passe

  • longueur est au moins 8
  • Au moins 1 lettre majuscule
  • Au moins 1 lettre minuscule
  • Au moins 3 chiffres

J'ai écrit ce programme, mais il ne me donne pas la bonne sortie:

import java.util.Scanner; 

public class Question5 { 
    public static void main(String[] args) { 
     Scanner in = new Scanner (System.in); 
     System.out.println("Please enter your password: "); 
     String input = in.nextLine(); 
     boolean flag = validate(input); 
     if (flag = true) { 
      System.out.println("password verified"); 
     } 
     else { 
      System.out.println("not a good password"); 
     } 
    } 
    public static boolean validate(String input) { 
     boolean flag = false; 

     int uppercaseCounter = 0; 
     int lowercaseCounter = 0; 
     int digitCounter = 0; 
     int letterCounter = 0; 

     for (int i = 0; i<(input.length()); i++) { 
      int totalCounter = digitCounter + letterCounter; 
      if (totalCounter >= 8 && digitCounter >= 3 && uppercaseCounter > 0 && lowercaseCounter > 0) { 
       flag = true; 
      } 
      else { 
       if (Character.isDigit(i)) { 
        digitCounter++; 
       } 
       if (Character.isLetter(i)) { 
        letterCounter++; 
       } 
       if (Character.isUpperCase(i)) { 
        uppercaseCounter++; 
       } 
       if (Character.isLowerCase(i)) { 
        lowercaseCounter++; 
       } 
      } 
     } 
     return flag; 
    } 
} 

Quelqu'un peut-il m'aider? Merci beaucoup!

+3

'if (flag == true)' remarquez qu'il devrait être double '=='! – TDG

+3

@TDG Ou, mieux encore, simplement 'if (flag)'. – jsheeran

+0

quelle est l'entrée et la sortie alors? –

Répondre

0

Voici la capture:

if (flag = true) 
{ 
    System.out.println("password verified"); 
} 

= est un opérateur d'affectation == est l'opérateur relationnel. Pour corriger, faites flag==true.

également, dans votre méthode, vous comparez i, qui est le compteur, et non la char A i. Donc, faire

if(Character.isDigit(input.charAt(i))){ //Do this for all Character.isSomething() Methods 

pour tous les chèques que vous faites.

0

Vous regardez en fait le i compteur dans vos différents si au lieu de la chaîne d'entrée ...

utiliser quelque chose comme

char c = s.charAt(i);   

et vérifiez l'entrée Chars

En outre, vous devriez changer le contrôle if(flag = true) avec if(flag)

0

changement

if (flag = true) 
{ 
    System.out.println("password verified"); 
} 
else 
{ 
    System.out.println("not a good password"); 
} 

à

if (flag) 
{ 
    System.out.println("password verified"); 
} 
else 
{ 
    System.out.println("not a good password"); 
} 

Lorsque vous écrivez if(flag=true) alors vous faites une opération d'affectation et non une comparaison d'égalité.

En outre, la logique doit être Character.isDigit(input.charAt(i)) puisque vous souhaitez vérifier le caractère à i et non i lui-même. Pour conclure, je voudrais dire que ce problème serait amusant à résoudre avec Regular Expressions. Consultez le tutoriel this sur les expressions régulières en Java.

0

En plus d'autres réponses, ce code devrait être déplacé en dessous des incréments de compteur:

int totalCounter = digitCounter + letterCounter; 
if (totalCounter >= 8 && digitCounter >= 3 && uppercaseCounter > 0 && lowercaseCounter > 0) { 
    flag = true; 
} 

Sinon, vous courez le risque de faux retour lorsque votre mot de passe deviendrait valide le dernier caractère.