[英]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.