2017-04-10 65 views
-2

我想寫一個程序,用於檢查插入密碼:計劃密碼驗證

  • 長度是8
  • 至少1個大寫字母
  • 至少1個小寫字母的最小
  • 至少3位數字

我寫了這個程序,但它沒有給我正確的輸出:

import java.util.Scanner; 

public class Question5 { 
    public static void main(String[] args) { 
     Scanner in = new Scanner (System.in); 
     System.out.println("Please enter your password: "); 
     String input = in.nextLine(); 
     boolean flag = validate(input); 
     if (flag = true) { 
      System.out.println("password verified"); 
     } 
     else { 
      System.out.println("not a good password"); 
     } 
    } 
    public static boolean validate(String input) { 
     boolean flag = false; 

     int uppercaseCounter = 0; 
     int lowercaseCounter = 0; 
     int digitCounter = 0; 
     int letterCounter = 0; 

     for (int i = 0; i<(input.length()); i++) { 
      int totalCounter = digitCounter + letterCounter; 
      if (totalCounter >= 8 && digitCounter >= 3 && uppercaseCounter > 0 && lowercaseCounter > 0) { 
       flag = true; 
      } 
      else { 
       if (Character.isDigit(i)) { 
        digitCounter++; 
       } 
       if (Character.isLetter(i)) { 
        letterCounter++; 
       } 
       if (Character.isUpperCase(i)) { 
        uppercaseCounter++; 
       } 
       if (Character.isLowerCase(i)) { 
        lowercaseCounter++; 
       } 
      } 
     } 
     return flag; 
    } 
} 

有人可以幫助我嗎?非常感謝你!

+3

'if(flag == true)'notice it should be double'=='! – TDG

+3

@TDG或者,更好的是,只需'if(flag)'。 – jsheeran

+0

什麼是輸入和輸出呢? –

回答

0

這裏有個問題:

if (flag = true) 
{ 
    System.out.println("password verified"); 
} 

=賦值運算符==是關係運算符。要修復,請執行flag==true

而且,在你的方法,你是比較i,這是計數器,而不是 chari。因此,對於所有的檢查你湊合這

if(Character.isDigit(input.charAt(i))){ //Do this for all Character.isSomething() Methods 

0

你實際上是在檢查你的各種的i計數器如果不是輸入字符串...

使用類似

char c = s.charAt(i);   

,確認輸入字符

而且你應該改變支票if(flag = true)if(flag)

0

變化

if (flag = true) 
{ 
    System.out.println("password verified"); 
} 
else 
{ 
    System.out.println("not a good password"); 
} 

if (flag) 
{ 
    System.out.println("password verified"); 
} 
else 
{ 
    System.out.println("not a good password"); 
} 

當你寫if(flag=true)那麼你正在做的賦值操作,而不是一個平等的比較。

此外,邏輯應爲Character.isDigit(input.charAt(i)),因爲您要檢查i處的字符而不是i本身。

最後,我想說這個問題很有趣,可以用Regular Expressions來解決。在Java中檢查this正則表達式教程。

0

除了其他的答案,這個代碼應該移到下面的櫃檯遞增:

int totalCounter = digitCounter + letterCounter; 
if (totalCounter >= 8 && digitCounter >= 3 && uppercaseCounter > 0 && lowercaseCounter > 0) { 
    flag = true; 
} 

否則可能返回false時,您的密碼將成爲最後一個字符有效的風險。