密码始终返回无效

时间:2013-11-24 20:56:51

标签: java

这是我的代码:

    import java.util.*;  
    import java.lang.String;  
    import java.lang.Character;  

    public class password {  
        public static void main(String[] args) {  
            Scanner input = new Scanner(System.in);  
            System.out.print("Please enter a Password: ");  
            String password = input.next();  
            if (isValid(password))  
            {   
            System.out.println("valid Password");  
            System.out.print("Please verify your Password: ");  
            String vrfypassword = input.next();

            if (vrfypassword.equals(password)){
             System.out.println("Password Verfied");
             } else {
             System.out.println("Unable to verify password");
            }
            }
            else 
            {  
                System.out.println("InValid Password"); 
            } 

        }  
        public static boolean isValid(String password) {  
            if (password.length() < 10) {   
            return false;  
            } else {      
                char c;  
                int count = 1;   
                for (int i = 0; i < password.length() - 1; i++) {  
                    c = password.charAt(i);  
                    if (!Character.isLetterOrDigit(c)) {          
                        return false;  
                    } else if (!Character.isDigit(c))   
                        return false;      
                }  
            }  
            return true;  
        }  
    }

我不确定为什么,但即使我使用“应该”通过的密码,它总是返回一个无效的密码。要求少于10个字符,一个字母和一个数字。我有什么不对的吗?

4 个答案:

答案 0 :(得分:0)

if (password.length() < 10) { return false; }  
  

要求少于10个字符

您的要求未反映在代码中。

反转声明:

if (password.length() > 10) { return false; }  

而且:

if (!Character.isDigit(c)) { return false; }

诅咒:

  

要求少于10个字符,一个字母和一个数字

离开这张支票。

试试这个:

public static boolean isValid(String password) {  
        if (password.length() < 10) {   
            return false;  
        } else {      
            char c;  
            int digitCount, letterCount;   
            for (int i = 0; i < password.length(); i++) {  
                c = password.charAt(i);  
                if (Character.isLetter(c)) {          
                    letterCount++; 
                } else if (Character.isDigit(c))   
                    digitCount++;      
            }  
            if(digitCount < 1 || lettercount < 1) { return false; }
        }  
        return true;  
    } 

答案 1 :(得分:0)

问题是,只要密码中有字母,它就会返回false,因为这句话:

...
else if (!Character.isDigit(c)){
    System.out.println("H2");
    return false;
}

答案 2 :(得分:0)

更改此

           if (!Character.isLetterOrDigit(c)) {          
                    return false;  
                } else if (!Character.isDigit(c))   
                    return false;      
            }  

          if (!Character.isLetterOrDigit(c)) {          
                    return false;  
          } 

答案 3 :(得分:0)

检查您是否正在从输入中读取\ r或\ n。 这既不是数字,也不是字母,可能会破坏事物。

这也是正确的:

i < password.length() - 1

不应该是:

i < password.length()