【问题标题】:Java password checker with strings带字符串的 Java 密码检查器
【发布时间】:2017-11-17 01:08:49
【问题描述】:

已经为此奋斗了一段时间,对 java 还是很陌生,并且真的在为这个任务而苦苦挣扎。我们打算进行密码检查器分配,检查输入的 2 个密码是否相同。然后还要根据一些“要求”检查它们,例如密码长度至少为 8 个字符、1 个特殊字符、1 个大写和 1 个小写、连续重复字符不超过 3 次(即“aaa”)。

非常感谢您提出任何意见或批评,并在此先感谢您。

import java.util.Scanner;

/**
 *
 * @author Jonot
 */
public class Passwords {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        //Asks and records users inputted passwords
        Scanner input = new Scanner(System.in);
        System.out.println("Please enter your password");
        String password = input.nextLine();
        System.out.println("Please re-enter your password");
        String passwordCheck = input.nextLine();
        //boolean to check if the inputted passwords meets requirements set below
        boolean check;
        check = isConfirmed(password);
        while (!password.equals(passwordCheck) || (!check)) {
            System.out.println("The password you entered is invalid");
            System.out.println("Please try again");
            password = input.nextLine();
            System.out.println("please re-enter");
            passwordCheck = input.nextLine();

            check = isConfirmed(password);
            //String password = input.nextLine();
            //check = isConfirmed(password);

            //if passwords meets boolean requirements, 
            if (isConfirmed(password)) {
                //this will print out. Doesn't work right now.
                System.out.println("password is valid");
            } else {
            }

        }

    }
    //Boolean variables and they're set requirements. Do not work right now.
    //Not sure why.

    public static boolean isConfirmed(String password) {
        Boolean leastOneUpperCase = false;
        Boolean leastOneLowerCase = false;
        Boolean leastOneDigit = false;
        Boolean oneSpecialCharacter = false;

        if (password.length() < 8) {
            return false;
        }

        for (int i = 0; i < password.length(); i++) {
            if (Character.isUpperCase(password.charAt {i

                    ));

                    {
              leastOneUpperCase = true;
                }
                else if (Character.isLowerCase(password.charAt(i)));
                {
                    leastOneLowerCase = true;
                }
                else if (Character.isDigit(password.charAt(i)));
                {
                    leastOneDigit = true;
                }
            }
            return (leastOneUpperCase && leastOneLowerCase && leastOneDigit);

        }
        return false;
    }

【问题讨论】:

  • 应该添加..但没有及时添加。现在它要求输入,但根本没有成功检查。我在 else ifs 块中遇到了 .charAt 问题。
  • 您有问题吗?

标签: java passwords charat


【解决方案1】:

isConfirmed 方法中存在一个主要问题。带有变量的return 语句位于检查每个字符的循环内。因此,return 语句是在检查第一个字符后执行的,因此总是返回 false,因为三个布尔值中有两个仍然是 false。

此外,您的 charAt 检查中的某些分号似乎不合适。不确定这是否是您的帖子中引入的格式错误。最后,我认为通过将当前检查的字符拉入变量并使用它而不是多次调用charAt,代码会更具可读性。

这是修改后的代码:

import java.util.Scanner;

/**
 *
 * @author Jonot
 */
public class Passwords {

    /**
     * @param args the command line arguments
     */
    public static final void main(String[] args) {
        //Asks and records users inputted passwords
        Scanner input = new Scanner(System.in);
        System.out.println("Please enter your password");
        String password = input.nextLine();
        System.out.println("Please re-enter your password");
        String passwordCheck = input.nextLine();
        //boolean to check if the inputted passwords meets requirements set below
        boolean check;
        check = isConfirmed(password);
        while (!password.equals(passwordCheck) || (!check)) {
            System.out.println("The password you entered is invalid");
            System.out.println("Please try again");
            password = input.nextLine();
            System.out.println("please re-enter");
            passwordCheck = input.nextLine();

            check = isConfirmed(password);
            //String password = input.nextLine();
            //check = isConfirmed(password);

            //if passwords meets boolean requirements, 
            if (isConfirmed(password)) {
                //this will print out. Doesn't work right now.
                System.out.println("password is valid");
            } else {
            }

        }

    }
    //Boolean variables and they're set requirements. Do not work right now.
    //Not sure why.

    public static boolean isConfirmed(String password) {
        Boolean leastOneUpperCase = false;
        Boolean leastOneLowerCase = false;
        Boolean leastOneDigit = false;
        Boolean oneSpecialCharacter = false;

        if (password.length() < 8) {
            return false;
        }

        for (int i = 0; i < password.length(); i++) {
            char c = password.charAt(i);

            if (Character.isUpperCase(c))
            {
                leastOneUpperCase = true;
            }
            else if (Character.isLowerCase(c))
            {
                leastOneLowerCase = true;
            }
            else if (Character.isDigit(c))
            {
                leastOneDigit = true;
            }
                System.out.println("password is valid");
            } else {
            }

        }

    }
    //Boolean variables and they're set requirements. Do not work right now.
    //Not sure why.

    public static boolean isConfirmed(String password) {
        Boolean leastOneUpperCase = false;
        Boolean leastOneLowerCase = false;
        Boolean leastOneDigit = false;
        Boolean oneSpecialCharacter = false;

        if (password.length() < 8) {
            return false;
        }

        for (int i = 0; i < password.length(); i++) {
            char c = password.charAt(i);

            if (Character.isUpperCase(c))
            {
                leastOneUpperCase = true;
            }
            else if (Character.isLowerCase(c))
            {
                leastOneLowerCase = true;
            }
            else if (Character.isDigit(c))
            {
                leastOneDigit = true;
            }
        }

        return (leastOneUpperCase && leastOneLowerCase && leastOneDigit);
    }
}

【讨论】:

    猜你喜欢
    • 2022-01-02
    • 2016-06-16
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 2016-02-26
    • 2023-04-06
    相关资源
    最近更新 更多