提示符是:
编写Java程序以在命令行中从用户读取字符串(密码),然后检查密码是否符合公司密码策略。
政策是:
1)密码必须至少为8个字符
2)密码必须包含一个大写字母
3)密码必须包含一位数。
使用while循环逐步执行字符串。
如果密码符合,则输出“密码正常”,否则
输出“密码不符合政策。”
我把它弄下来了,它似乎仍然不起作用:
String password = "";
boolean hasDigitAndUpper = false;
boolean hasUpper = false;
int i = 0;
System.out.print("Please enter a password: ");
password = scnr.nextLine();
if (Character.isUppercase(password.charAt(i))){
if (Character.isUppercase(password.charAt(i))) {
i++;
hasDigitAndUpper = true;
}
}
while (password.length() < 8 || hasDigitAndUpper != true) {
System.out.println("Password does not conform to policy");
System.out.print("Please enter a password: ");
password = scnr.nextLine();
}
System.out.println("Password OK");
我想我最大的问题是我的布尔值,我无法弄清楚如何修复。
答案 0 :(得分:0)
只是一些提示:
if (Character.isUppercase(password.charAt(i))){
if (Character.isUppercase(password.charAt(i))) {
i++;
hasDigitAndUpper = true;
}
}
再往下,你正在使用while循环。所以你以前听说过循环。提示:您想要循环整个字符串并检查所有字符。在我的密码中,大写字符通常会在索引0或1之后出现。
然后:
while (password.length() < 8 || hasDigitAndUpper != true) {
System.out.println("Password does not conform to policy");
System.out.print("Please enter a password: ");
password = scnr.nextLine();
}
不会做任何合理的事情。您希望循环围绕其他代码。此代码只是循环并要求用户输入一个具有8个字符的新密码 - 其他布尔值hasDigitAndUpper
具有旧值。
所以:你想写一个小方法每标准;然后你的代码就是:
while (not-all-criteria) {
password = new user input
check password length
check password has upper case
...
希望这足以让你前进,请理解我不会为你做功课。你迫切需要自己练习这些东西!
答案 1 :(得分:0)
您可以使用这个简单的功能。这将迭代密码并检查条件。如果满足所有条件,则返回true,否则为false。
public static boolean isValid(String pwd)
{
if (pwd == null || pwd.length() < 8)
{
return false;
}
boolean containUpper = false;
boolean containDigit = false;
int i = 0;
while (i < pwd.length())
{
if (containDigit && containUpper)
{
break;
}
if (Character.isUpperCase(pwd.charAt(i)))
{
containUpper = true;
}
if (Character.isDigit(pwd.charAt(i)))
{
containDigit = true;
}
i++;
}
return containDigit & containUpper;
}