java - 带有密码检查器的布尔逻辑循环有问题
问题描述
我正在尝试创建一个 Java 程序来检查输入密码是否至少包含三个小写字母、两个大写字母和 1 个数字。这是我到目前为止所拥有的:
Scanner inputDevice = new Scanner(System.in);
boolean valid= false;
String password;
do{
System.out.print("Enter a password that contains at least 2 uppercase letters, three lowercase letters, and at least 1 digit: ");
password = inputDevice.nextLine();
boolean Upper;
boolean Lower;
boolean Digit;
int UpperCount=0;
int LowerCount=0;
int DigitCount=0;
for(int i=0; i<password.length(); i++){
if (Character.isUpperCase(password.charAt(i)));
UpperCount++;}
if (UpperCount<2)
Upper=false;
else
Upper=true;
for(int i=0; i<password.length(); i++){
if (Character.isLowerCase(password.charAt(i)));
LowerCount++;}
if (LowerCount<3)
Lower=false;
else
Lower=true;
for(int i=0; i<password.length(); i++){
if (Character.isDigit(password.charAt(i)));
DigitCount++;}
if (DigitCount<1)
Digit=false;
else
Digit=true;
if ((Digit == false) || (Upper == false) || (Lower == false))
System.out.print("The password did not have enough of the following:");
if (Upper == false)
System.out.print("\nuppercase letters");
if (Lower == false)
System.out.print("\nlowercase letters");
if (Digit ==false)
System.out.print("\ndigits");
if ((Digit==true)&&(Upper==true)&&(Lower==true))
valid=true;
}while(valid!=true);
System.out.println("Valid password");
我已经和它搏斗了一段时间。我遇到的一些问题是:
- 返回循环顶部时计数未重置为零。
- 根据我的测试运行,循环无法识别数字或输入完全错误的输出。
- 现在它只是完全跳过循环并进入有效密码语句,无论我在输入中输入什么进行测试。
在这一点上,我真的很沮丧,可以使用一些帮助。
解决方案
摆脱你的分号。其他 2 个 if 语句if (Character.isUpperCase(password.charAt(i)));
应该是相同的。if (Character.isUpperCase(password.charAt(i)))
此外,作为可读性的旁注,我建议将括号移到新行,以便更容易查看 for 循环的结束位置。最初我以为每个 for 循环都有 3 个 if 语句,但后来我看到括号隐藏在你的第一个 if 语句中