为什么它会跳过if-else语句的else部分?

时间:2015-10-11 20:29:12

标签: java if-statement

它一直在跳过我声明中的其他部分。如果不满足所有其他限制,我只是希望它打印出无效行。

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");
   }
}

为什么在不满足所有ifs时跳过并且不打印无效行?

4 个答案:

答案 0 :(得分: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明确比较,所以你可以写得更短:

      if (lowerCase && upperCase && number && str.length() >= 8)

答案 1 :(得分:2)

else条件位于错误的位置,只有在lowerCase条件为false时才会触及。无论如何,我们可以在一个条件下简化和组合所有if s,你的意思是:

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

答案 2 :(得分:2)

可以简化此代码以显示控制流:

  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
    ...

答案 3 :(得分:0)

您的测试密码至少包含一个小写字符。只要它这样做,else语句将永远不会执行。测试&#34;如果所有条件都是真的......否则......&#34;尝试下面的内容:

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

顺便说一句,正如您所看到的,我不使用lowerCase == true ,因为它不需要,lowerCase已经是布尔值。