2017-04-27 373 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; 
    }  
}