JAVA:密码标准

时间:2017-03-01 05:11:42

标签: java passwords

提示符是:

  

编写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");

我想我最大的问题是我的布尔值,我无法弄清楚如何修复。

2 个答案:

答案 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;
}