2017-04-27 117 views
-9
  • 密码应由最少8个字符组成。
  • 密码应包含数字和字母。
  • 不允许特殊字符。

此代码的输出始终为“无效的密码” 应该修改哪些内容以获取正确的输出?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"); 
     } else { 
      System.out.println("Invalid Password"); 
     } 
    } 

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

     } 
     return true; 
    } 
} 
+1

在调试器中一行一行地浏览代码。想想这个逻辑。检查你调用的函数返回。你会找到它。 –

+1

答:你的程序应该修改为正确的输出。 – Andremoniy

回答

0

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

的工作,虽然这样说:

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

=>如果该字符不能是字母也不是数字的回报虚假

+0

如果我这样做,它显示有效的密码,即使它只是字母,甚至它只是数字。 –

+0

你需要两者的结合吗? –

0

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

+0

这不会解决实际问题 –

+0

你是正确的,但它不会解决问题。 –

0

|是一个按位运算符,||是一个逻辑运算符。此外,逻辑还存在问题。 A Character不能是字母Digit在同一时间,所以这个条件总是true。尝试使用&&

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

这不会解决实际问题 –

+0

@SamiKuhmonen只是忽略了这一点。现在修复 –

0

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

如果您的方法isValid,您有一个循环遍历字符串中的所有字符。这是做到这一点的正确方式,所以你清楚地知道你需要做什么来实现目标。

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

  1. 得到第一个字符的字符串中
  2. 检查字符是一个数字或字符
  3. 如果字符不是一个数字或字符,返回false

你的方法如果第一个字符不是字符,或者不是数字,则会落下。理性地说,你有正确的想法,但一封信不是一个数字,反之亦然。

假设第一个字母是'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; 
    }  
}