2017-09-12 52 views
0

某些網站對密碼施加了一定的規則。我正在寫一個方法來檢查一個字符串是否是一個有效的密碼。我有用於輸入密碼的java代碼,遵循一定的規則

口令的規則是:

  1. 密碼必須至少八個字符
  2. 密碼只由字母和數字
  3. 密碼必須包含至少兩位數字

我想出了大部分的代碼,我認爲我現在有一些正確的概念,無論輸入什麼密碼都打印出「無效密碼」..我試着運行調試器,但是真的很困惑。

這是我下面的代碼:

import java.util.Scanner; 


public class practice { 
    public static void main(String[] args) { 

    System.out.print("Enter a password"); 
    Scanner input = new Scanner(System.in); 

    String password = input.nextLine(); 
    boolean isCorrect = checkPassword(password); 

    if(isCorrect) 
    { 
    System.out.println("Valid Password"); 
    } 
    else 
    { 
    System.out.println("Invalid Password"); 
    } 
} 

//this method checks the password 
public static boolean checkPassword(String password) 
{ 
    int countDigit = 0; 

    if (password.length() >=8){ 
     return false; 
     } 
    for(int i = 0; i <password.length(); i++) 
    { 
     if(!(Character.isLetterOrDigit(password.charAt(i)))) 
     { 
      return false; 
     } 
    } 

for(int i = 0; i<password.length(); i++){ 
     if((Character.isDigit(password.charAt(i)))){ 
     countDigit = countDigit + 1; 
     } 
    } 
if (countDigit >= 2){ 
    return true; 
} 

else 
return false; 

    } 
    } 
+0

您並不總是需要調試器才能進行調試。我會開始在每個'return false;'行輸出一個唯一的消息來查看哪一個被觸發。 –

+0

是的,只是想通了.. – Andrey

+0

很高興聽到它。 –

回答

0

的錯誤是在這裏:

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

在這裏,你說,如果密碼的長度超過或等於8個字符,密碼是無效的,這與要求完全相反。將其更改爲:

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

另外,您可以減少for循環的次數以使代碼更快。您可以統計位數並在同一個循環中檢查isLetterOrDigit

int countDigit = 0; 

    if (password.length() < 8) { 
     return false; 
    } 
    for (int i = 0; i < password.length(); i++) { 
     if (!(Character.isLetterOrDigit(password.charAt(i)))) { 
      return false; 
     } 
     if ((Character.isDigit(password.charAt(i)))) { 
      countDigit = countDigit + 1; 
     } 
    } 
    if (countDigit >= 2) { 
     return true; 
    } else { 
     return false; 
    } 
相關問題