2015-10-11 67 views
1

它不斷跳過我聲明的其他部分。如果沒有滿足所有其他限制,我只希望它打印出無效行。爲什麼它跳過我的if-else語句的其他部分?

import java.util.Scanner; 
public class Program_3 
{ 
    public static void main(String[] args) 
    { 
     Scanner input = new Scanner(System.in); 
     System.out.print("Enter a password: "); 
     String str = input.nextLine(); 
     boolean lowerCase = false; 
     boolean upperCase = false; 
     boolean number = false; 
     char y; 
     for (int i = 0; i < str.length(); i++) 
     { 
     y = str.charAt(i); 
     if(Character.isUpperCase(y)) 
     { 
      upperCase = true; 
     } 
     else if(Character.isDigit(y)) 
     { 
      number = true; 
     } 
     else if(Character.isLowerCase(y)) 
     { 
      lowerCase = true; 
     } 
     } 
     if (lowerCase == true) 
     { 
     if (upperCase == true) 
     { 
      if (number == true) 
      { 
       if (str.length() >= 8) 
       { 
        System.out.println("Verdict:\t Valid"); 
       } 
      } 
     } 
     } 
     else 
     System.out.println("Verdict:\t Invalid"); 
    } 
} 

爲什麼當所有的if不符合時,它會跳過並且不打印無效的行?

回答

4

您代碼中的else僅與最外面的if有關。 所以只有在lowerCase == false時纔會執行。

爲了解決這個問題的邏輯,結合所有三個條件中一個if,即:

if (lowerCase == true && upperCase == true && number == true && str.length() >= 8) 
    { 
     System.out.println("Verdict:\t Valid"); 
    } 
    else 
    System.out.println("Verdict:\t Invalid"); 

側面說明,布爾不需要明確的比較true,所以你可以把它寫短:

​​
+0

不需要== true它們已經是布爾值 – Ghokun

+1

謝謝!這非常有幫助!我不知道爲什麼我沒有想到這一點! – Nick

2

else條件是放錯了地方,它會只如果lowerCase條件爲達到。不管怎樣,我們可以簡化並在一個單一的情況下,你的意思是說什麼組合所有if S爲這樣的:

if (lowerCase && upperCase && number && str.length() >= 8) { 
    System.out.println("Verdict:\t Valid"); 
} else { 
    System.out.println("Verdict:\t Invalid"); 
} 
2

這個代碼可以b都是簡化顯示控制流:

if(lowerCase == true) 
    { 
     //lowerCase == true -> execute this code 
     if(upperCase == true)... 
    }else 
     //lowerCase == false -> execute this code 
     ... 

如果條件爲false,則內部的if語句(這是獨佔btw。)不執行外部else-語句。您的代碼的邏輯正確版本爲:

if(lowerCase && upperCase && isNumber && str.length() > 8) 
    System.out.println("Verdict:\t Valid"); 
else 
    ... 
0

您的測試密碼至少包含一個小寫字符。只要這樣做,else語句將永遠不會執行。爲了測試「如果所有條件都滿足... ELSE ...」嘗試follwing:

if (lowerCase && upperCase && number && str.length >= 8) { 
    // password ok 
} else { 
    // password not ok 
} 

順便說一句,你可以看到,我不使用小寫==真,因爲它是沒有必要的,lowerCase已經是一個布爾值。

相關問題