2014-02-15 2 views
0

프로그래밍 할당을 완료하려고하는데 대문자 1 개, 소문자 1 개, 숫자 1 개 및 특수 문자 1 개가있는 "암호 확인 프로그램"을 만들어야합니다. 무효 인 경우, "무효"와 false로 표시된 규칙을 표시해야합니다. 내가 가진 문제는 오류 메시지가 아니지만 항상 긍정적 인 응답과 모든 위반 된 규칙을 얻으며 두 번 읽습니다. 여기 좀 도와 줄래?암호 확인 프로그램 문제

import java.util.Scanner; 

public class PasswordVerifier { 
    public static void main(String[] args) { 
     System.out.println("Password Verifier"); 
     System.out.println("Enter a password that meets the following rules: "); 
     System.out.println("-Must be at least 8 characters long" + '\n' + 
       "-Must contain at least 1 lower case character" + '\n' + 
       "-Must contain at least 1 upper case character" + '\n' + 
       "-Must contain at least 1 numeric digit" + '\n' + 
       "-Must contain at least 1 special character from the set: [email protected]#$%^&*" + '\n' + 
       "-Must not contain the word 'and' or the word 'end'"); 

     String password; 
     String contains1 = "and"; 
     String contains2 = "end"; 
     String special = "[email protected]#$%^&*"; 

     Scanner stdIn = new Scanner(System.in); 
     boolean digit = false;  //Has at least 1 digit 
     boolean upper = true;  //Has at least 1 upper case letter 
     boolean lower = true;  //Has at least 1 lower case letter 
     boolean hasspecial = true; //Has at least 1 special character 
     boolean length = true;  //Has at least 8 digits 
     boolean endand = true;  //Does not contain end or and 
     boolean valid = false;  //Is the password valid? 


     System.out.println("Enter password: "); 
     password = stdIn.nextLine(); 


     int result; 
     result = password.indexOf(contains1); 
     if (result == -1) { 
      System.out.println(""); 
     } else { 
      System.out.println("Must not contain the word 'and'"); 
     } 

     int result2; 
     result2 = password.indexOf(contains2); 
     if (result2 == -1) { 
      System.out.println(""); 
     } else { 
      System.out.println("Must not contain the word 'end'"); 
     } 

     if (password.length() < 8) { 
      System.out.println("Must be at least 8 characters long."); 
     } else { 
      System.out.print(""); 
     } 
     for (int i = 0; i < password.length(); i++) { 
      if (!(Character.isUpperCase(password.charAt(i)))) ; 
      { 
       upper = false; 
       valid = false; 
       i++; 
      } 
      if (!(Character.isLowerCase(password.charAt(i)))) ; 
      { 
       lower = false; 
       valid = false; 
       i++; 
      } 
      if (!(Character.isDigit(password.charAt(i)))) ; 
      { 
       digit = false; 
       valid = false; 
       i++; 
      } 
      if (!(password.matches(special))) ; 
      { 
       hasspecial = false; 
       valid = false; 
      } 

      if (upper != true) { 
       System.out.println("Must contain an upper case letter."); 
      } 
      if (lower != true) { 
       System.out.println("Must contain a lower case letter."); 
      } 
      if (digit != true) { 
       System.out.println("Must contain a numeric digit."); 
      } 
      if (hasspecial != true) { 
       System.out.println("Must contain a special character."); 
      } 
      if (valid) { 
       System.out.println("Valid."); 
      } else if (valid != true) { 
       System.out.println("Invalid."); 
      } 
     } 
    } 

} 
+2

을 탈출하는 방법을 알고하지 않으며, 논문에서 알고리즘을 실행하고 각 단계에서 각 변수의 값. 힌트 : 대문자가 아닌 문자를 발견했다고해서 암호에 대문자가 없음을 의미하지는 않습니다. –

+0

당신은 결코 ** 사실 ** ** ** 변수 **에 할당하지 않습니다. 어떻게 긍정적 인 반응을 얻을 수 있습니까 ?? – Devavrata

+0

"valid"를 "true"로 변경했지만 동일한 문제가 발생했습니다 ... – user3313912

답변

0

한 가지. 모든 if 라인이 잘못되었습니다.

';' if 후. 즉, if 조건이 충족되면 아무 것도하지 않고 항상 다음 행을 실행합니다.

또 다른 것은, 당신이 당신은 아마하지 않는 문자열과 일치하는 암호 "! @ # $으로의 %^& (별표)"를 요구하고

if (!(password.matches(special))) { 
    hasspecial = false; 
    valid = false; 
} 

을한다. 따라서 문자열에 특수 문자가 포함되어 있다고 가정하기 때문에 hasspecial은 항상 true입니다. 다음과 같은 경우 편지 아무튼 ((별표)! @ # $으로 %^& *]. ". (별표)) (아마 일부 문자를 이스케이프). 마지막으로

, 당신이 말하는 password.matches 뭔가를 쓰고 싶어 조건을 충족시키지 못하면 마커를 거짓으로 설정합니다. 다음 문자가 조건을 충족시키지 못하면 마커는 여전히 거짓입니다. 모든 조건이 거짓이라고 가정하고 이러한 유형의 문제에 접근해야합니다. . true로 마커는 조건이

참고 충족되면 : 나는 (별표)를 작성하는 대신 *의 텍스트가 강조됩니다 변경할 수 없기 내가 암호를 선택 그것을 :(

+0

고마워요 !! – user3313912