2015-10-11 48 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已经是一个布尔值。

相关问题