当前位置: 首页 > 知识库问答 >
问题:

创建一个要求输入密码并检查密码是否正确的程序

长孙知
2023-03-14

这是我明天为期中考试做的一些练习。我似乎找不到我的代码的问题,这就是问题所在:

当我们的许多信息存储在网上时,拥有一个安全的密码是非常重要的。按照以下规则编写一个验证新密码的程序:

•密码长度必须至少为8个字符。

密码必须至少有一个大写字母和一个小写字母

• 密码必须至少有一位数字。

编写一个要求输入密码的程序,然后再次要求确认密码。如果密码不匹配或未满足规则,请再次提示。您的程序应包含一种检查密码是否有效的方法。

代码如下:

import java.util.Scanner;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author HP Laptop
 */
public class PasswordValidation {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Please enter password : ");
        String password = in.nextLine();
        System.out.print("Please re-enter the password to confirm : ");
        String confirm = in.nextLine();
        boolean condition;
        condition = isValid(password);
        while (!password.equals(confirm) && (!condition)) {
            System.out.println("The password is invalid");
            System.out.print("Please enter the password again : ");
            String Password = in.nextLine();
            System.out.print("Please re-enter the password to confirm : ");
            String Confirm = in.nextLine();


        }
        if (isValid(password)) {
            System.out.println("The password is valid");
        /*} else {
            System.out.println("The password is not valid");
            System.out.print("Please enter the password again : ");
            String Password = in.nextLine();
            System.out.print("Please re-enter the password to confirm : ");
            String Confirm = in.nextLine();
        }*/
    }
    }

    public static boolean isValid(String password) {

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

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


        for (int b = 0; b < password.length(); b++) {
            if (Character.isLowerCase(password.charAt(b))) {
            }
        }

        for (int c = 0; c < password.length(); c++) {
            if (Character.isDigit(password.charAt(c))) {
            }

        }

        return true;


    }
}
}

错误是:

我输入一个少于8位数的名字,当它不是有效的时候,它会说它是有效的,当它是正确有效的时候,它不会打印出它是有效的。

共有3个答案

太叔灿
2023-03-14

代替

while (!password.equals(confirm) && (!condition)) {

你想要

while (!password.equals(confirm) || (!condition)) {

由于如果 isValid(password) 返回 false,或者确认的密码与原始键入的密码不同,则密码无效。

如果password.equals(确认),即使条件为false(由于密码太短),您当前的代码也不会通过time条件。

另外,你的while循环要调用< code > condition = is valid(password);再次输入密码和确认密码后。否则,while循环将永远不会退出。

所以要么写:

    condition = isValid(password);
    while (!password.equals(confirm) || (!condition)) {
        System.out.println("The password is invalid");
        System.out.print("Please enter the password again : ");
        String Password = in.nextLine();
        System.out.print("Please re-enter the password to confirm : ");
        String Confirm = in.nextLine();
        condition = isValid(password);
    }

或者更优雅地说:

    while (!password.equals(confirm) || !isValid(password)) {
        System.out.println("The password is invalid");
        System.out.print("Please enter the password again : ");
        String Password = in.nextLine();
        System.out.print("Please re-enter the password to confirm : ");
        String Confirm = in.nextLine();
    }
华涵意
2023-03-14

这里可能存在一些问题,但最突出的是:

while (!password.equals(confirm) && (!condition)) {

如果我键入密码“abc”并确认为“abc”,那么< code >!password.equals(confirm)为< code>false。我想你希望这是:

while (!password.equals(confirm) || (!condition)) {

因为您希望在密码不匹配或无效时重复此行为。

这也是不正确的:

    condition = isValid(password);
    while (!password.equals(confirm) && (!condition)) {
        System.out.println("The password is invalid");
        System.out.print("Please enter the password again : ");
        String Password = in.nextLine();
        System.out.print("Please re-enter the password to confirm : ");
        String Confirm = in.nextLine();
    }
    condition = isValid(password);
    while (!password.equals(confirm) && (!condition)) {
        System.out.println("The password is invalid");
        System.out.print("Please enter the password again : ");
        password = in.nextLine(); // <-- HERE
        System.out.print("Please re-enter the password to confirm : ");
        confirm = in.nextLine(); // <-- HERE

        condition = isValid(password); // <-- HERE
    }
轩辕弘雅
2023-03-14

@user3821797:我稍微修改了你的isValid方法。仔细检查一下,确保你理解我做了什么。如果您有任何疑问,请在此处发表评论,我会为您提供帮助。

    public static boolean isValid(String password) {
    Boolean atleastOneUpper = false;
    Boolean atleastOneLower = false;
    Boolean atleastOneDigit = false;

    if (password.length() < 8) { // If its less then 8 characters, its automatically not valid
        return false;
    }

    for (int i = 0; i < password.length(); i++) { // Lets iterate over only once. Saving time
        if (Character.isUpperCase(password.charAt(i))) {
            atleastOneUpper = true;
        }
        else if (Character.isLowerCase(password.charAt(i))) {
            atleastOneLower = true;
        }
        else if (Character.isDigit(password.charAt(i))) {
            atleastOneDigit = true;
        }
    }

    return (atleastOneUpper && atleastOneLower && atleastOneDigit); // Return true IFF the password is atleast eight characters long, has atleast one upper, lower and digit
}
 类似资料:
  • 5.1 创建密码输入界面 5.1.1 示例代码 创建密码输入界面时,这里描述了安全性方面需要考虑的一些要点。 这里仅提及与密码输入有关的内容。 对于如何保存密码,未来会发布另一篇文章。 要点: 输入的密码应该被屏蔽显示(用*显示) 提供以纯文本显示密码的选项。 警告用户以纯文本显示密码有风险。 要点:处理最后输入的密码时,请注意以下几点以及上述要点。 如果在初始界面中有最后输入的密码,则将黑点的固

  • 在kubuntu上用存储的密码启动pgAdmin III,每次连接到数据库时都会要求输入密码,并给出错误“连接到服务器的错误:fe_sendauth:没有提供密码”。它忽略存储密码字段中的复选框。

  • 我试图检查密码,我加密之前,但我得到一个例外,我不知道为什么。 这里是我用来加密密码的方法: 加密工作成功。 此处为错误日志: 有什么想法吗?感谢你的帮助.

  • 问题内容: 当开发人员想要保护自己的Web应用程序安全时,Spring Security非常有用。 但是,如何创建帐户呢?和“忘记密码”?大多数登录页面都具有这些链接以及用户名和密码字段。Spring的默认登录页面没有这些链接…在很好的情况下,它可以支持“记住我” … Spring是否支持创建帐户,忘记密码和更改密码这些流程?如果答案是肯定的,您能给我指出一些文件吗? 我已经搜索了此问题,但找不到

  • 本文向大家介绍写一个密码默认星号,但可以查看密码的输入框相关面试题,主要包含被问及写一个密码默认星号,但可以查看密码的输入框时的应答技巧和注意事项,需要的朋友参考一下

  • 我正在尝试用VBA锁解锁excel文件。我用默认密码将文件锁定在代码中,并将此密码给其他文件中的用户。总是相同的密码,所以没有必要输入它由用户,我给他的文件锁定在一开始。 但我没有任何办法知道“密码是否好”。 谢谢你的帮助,抱歉我的英语!