它一直在跳过我声明中的其他部分。如果不满足所有其他限制,我只是希望它打印出无效行。
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时跳过并且不打印无效行?
答案 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已经是布尔值。