Java密码检查,代码修改

时间:2017-04-27 08:52:29

标签: java

  • 密码至少应包含8个字符。
  • 密码应包含数字和字母。
  • 不允许使用特殊字符。

此代码的输出始终为“无效密码” 应该修改什么才能获得正确的输出?

q=*      q=foo   q=foo        q=foo&filter=A:2,B:1
                 &filter=A:2                     
AggA     AggA    AggB         AggB
1(10)    1(5)    *2(5)*       *2(5)*
2(10)    2(5)
3(10)    1(10)

AggB     AggB    AggB         AggB
1(10)    1(5)    1(5)         *1(3)*
2(10)    2(5)    2(5)         2(5)
3(10)    3(0)    3(5)         3(5)

4 个答案:

答案 0 :(得分:0)

在if语句中执行OR时,代码中只有一个|。它应该是||。昨天我被困在同一件事上一小时:l

答案 1 :(得分:0)

|是一个按位运算符,||是一个逻辑运算符。此外,逻辑存在问题。 Character不能同时是信件数字,因此此条件始终为true。尝试使用&&

if(!Character.isLetter(c) && !Character.isDigit(c))
    return false;

答案 2 :(得分:0)

|是一个按位或,||是合乎逻辑的还是。你应该知道区别。

通过这种方式工作:

if(!Character.isLetter(c) && !Character.isDigit(c))
           return false;

=>如果字符不是字母也不是数字返回false

答案 3 :(得分:0)

我觉得我应该在你的方法中提到一些错误,因为它可能有助于节省你将来的时间。

如果你的方法isValid,你有一个循环遍历字符串中的所有字符。这是执行此操作的正确方法,因此您清楚地知道要实现目标需要做什么。

但是,从逻辑上讲,此方法接下来的操作如下:

  1. 获取字符串中的第一个字符
  2. 检查字符是数字还是字符
  3. 如果该字符不是数字或字符,则返回false
  4. 如果第一个字符不是字符,或者不是数字,您的方法将会失效。理性地说,你有正确的想法,但一封信不是一个数字,反之亦然。

    假设第一个字母是' A' - 它不是数字,所以返回false。 如果第一个字符是' 1' - 它不是一封信,所以返回false。

    如您所见,将操作员更改为&&如果只输入数字或字母,将停止程序失败,但如果添加任何非字母数字值,将返回false。

    如果您需要强制执行至少一个数字和至少一个数字,则必须在迭代时存储字符串中的数字和字符数。

    有两个变量,一个用于存储总位数,另一个用于存储字符数,并在逐步执行字符串时递增。

    如果找到的总位数大于零,并且找到的字母总数大于零,则您的密码有效。

    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");  
            } else {  
                System.out.println("Invalid Password");  
            }  
        }
    
    public static boolean isValid(String password) {
        if(password.length()<8) {    
           return false;
        } else {
           int dCount = 0;
           int cCount = 0;
           for (int i=0; i<=password.length()-1; i++) {
               char c=password.charAt(i);
    
               if(Character.isLetter(c) {
                   cCount++;
               }
               if(Character.isDigit(c)) {
                   dCount++;
               }
           }
           return dCount > 0 && cCount > 0;
       }    
    }