繁体   English   中英

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

[英]Why is it skipping the else part of my if-else 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");
   }
}

如果不满足所有条件,为什么会跳过而不打印无效行?

代码中的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)

else条件放置在错误的位置,只有在lowerCase条件为false才能达到。 而且无论如何,我们可以在单个条件下简化和组合所有if ,您的意思是:

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

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

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

您的测试密码至少包含一个小写字符。 只要这样做,else语句就永远不会执行。 要测试“如果所有条件都成立...否则...”,请尝试以下方法:

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

顺便说一句,如您所见,由于不需要,我不使用lowerCase == true ,lowerCase已经是一个布尔值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM