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

密码生成器(如何将构造函数添加到此程序)

蒲昊
2023-03-14

这是一个我从头制作的密码生成器,但我想添加一个构造函数,这样我就可以使用它进行调用,还需要创建另一个类来调用它。如果可能的话,我想在这个项目上得到一些帮助。所以我的程序基本上解释了如何生成随机数符号,大写和小写。我第一次创建密码生成器代码时,它工作得不太好,因为它给了我全大写,有时全小写,或者只是没有其他变量的符号,然后我编写了这段代码,告诉程序如果没有这个变量,在显示这些变量之前,它无法创建其他变量。

  import java.util.Scanner;
         class Passwd {
             public Passwd()
             {
                 System.out.println("Hello");
             }


            public static void main(String[] args) {
                 new Passwd();
                 Scanner in;`enter code here`
                in = new Scanner(System.in);
                int choice = 0;

                while (choice != 5) {
                    System.out.println("                Password Generation Menu                ");
                    System.out.println("********************************************************");
                    System.out.println("*  [1] Lowercase Letters                               *");
                    System.out.println("*  [2] Lowercase & Uppercase Letters                   *");
                    System.out.println("*  [3] Lowercase, Uppercase, and Numbers               *");
                    System.out.println("*  [4] Lowercase, Uppercase, Numbers, and Symbols  *");
                    System.out.println("*  [5] Quit                                            *");
                    System.out.println("********************************************************");

                    System.out.println("Enter Selection (1-5): ");
                    choice = in.nextInt();

                    if (choice < 1 || choice > 5)
                        System.out.println("Incorrect option....  ");
                    else if (choice > 0 && choice < 5) {
                        System.out.println("Password Length (1-14): ");
                        int passwordLength = in.nextInt();

                        char[] password = new char[passwordLength];
                        int randNum = 0;

                        if (choice == 1) {
                            for (int i = 0; i < passwordLength; i++) {
                                randNum = ((int) (Math.random() * 26 + 97));
                                while (randNum < 97 || randNum > 122) {
                                    randNum = ((int) (Math.random() * 26 + 97));
                                }
                                password[i] = (char) randNum;
                            }
                        }
                        if (choice == 2) {
                            randNum = ((int) (Math.random() * 26 + 97));
                            while (randNum < 97 || randNum > 122) {
                                randNum = ((int) (Math.random() * 26 + 97));
                            }
                            password[0] = (char) randNum;

                            randNum = ((int) (Math.random() * 26 + 65));
                            while (randNum < 65 || randNum > 90) {
                                randNum = ((int) (Math.random() * 26 + 65));
                            }
                            password[1] = (char) randNum;

                            for (int i = 2; i < passwordLength; i++) {
                                randNum = ((int) (Math.random() * 122 - 65 + 1)) + 65;
                                while ((randNum < 65 || randNum > 90) && (randNum < 97 || randNum > 122)) {
                                    randNum = ((int) (Math.random() * 122 - 65 + 1)) + 65;
                                }
                                password[i] = (char) randNum;
                            }

                        }
                        if (choice == 3) {
                            randNum = ((int) (Math.random() * 26 + 97));
                            while (randNum < 97 || randNum > 122) {
                                randNum = ((int) (Math.random() * 26 + 97));
                            }
                            password[0] = (char) randNum;

                            randNum = ((int) (Math.random() * 26 + 65));
                            while (randNum < 65 || randNum > 90) {
                                randNum = ((int) (Math.random() * 26 + 65));
                            }
                            password[1] = (char) randNum;

                            randNum = ((int) (Math.random() * 26 + 48));
                            while (randNum < 48 || randNum > 57) {
                                randNum = ((int) (Math.random() * 26 + 48));
                            }
                            password[2] = (char) randNum;

                            for (int i = 3; i < passwordLength; i++) {
                                randNum = ((int) (Math.random() * 122 - 48 + 1)) + 48;
                                while ((randNum < 65 || randNum > 90) && (randNum < 97 || randNum > 122) && (randNum < 48 || randNum > 57)) {
                                    randNum = ((int) (Math.random() * 122 - 48 + 1)) + 48;
                                }
                                password[i] = (char) randNum;
                            }

                        }
                        if (choice == 4) {
                            randNum = ((int) (Math.random() * 26 + 97));
                            while (randNum < 97 || randNum > 122) {
                                randNum = ((int) (Math.random() * 26 + 97));
                            }
                            password[0] = (char) randNum;

                            randNum = ((int) (Math.random() * 26 + 65));
                            while (randNum < 65 || randNum > 90) {
                                randNum = ((int) (Math.random() * 26 + 65));
                            }
                            password[1] = (char) randNum;

                            randNum = ((int) (Math.random() * 10 + 48));
                            while (randNum < 48 || randNum > 57) {
                                randNum = ((int) (Math.random() * 10 + 48));
                            }
                            password[2] = (char) randNum;

                            randNum = ((int) (Math.random() * 7 + 33));
                            while (randNum < 33 || randNum > 39) {
                                randNum = ((int) (Math.random() * 7 + 33));
                            }
                            password[3] = (char) randNum;

                            for (int i = 4; i < passwordLength; i++) {
                                randNum = ((int) (Math.random() * 122 - 33 + 1)) + 33;
                                while ((randNum < 65 || randNum > 90) && (randNum < 97 || randNum > 122) && (randNum < 48 || randNum > 57) && (randNum < 33 || randNum > 39)) {
                                    randNum = ((int) (Math.random() * 122 - 33 + 1)) + 33;
                                }
                                password[i] = (char) randNum;
                            }
                        }


                        for (int j = 0; j < passwordLength; j++)
                            System.out.print(password[j]);
                        System.out.println("\n");
                    }
                }
                System.out.println("Thank You for using World's Best Password generator \n");
            }
        }

共有1个答案

郎和通
2023-03-14

您可以应用OO原则并创建一个负责生成密码的类,例如PasswordGenerator。它看起来像:

public class PasswordGenerator {

  public String generatePassword(int passwordType) {
    // All your password generation logic
  }
}

因此,您可以在另一个类中使用它。

public class PasswordThing {

  public void doSomethingWithPassword() {
    PasswordGenerator passwordGenerator = new PasswordGenerator();

    String password = password.generatePassword(1);

    // ...
  }

  // or

  public static void main(String[] args) {

      // Get user choice from command line as you did in your sample
    PasswordGenerator passwordGenerator = new PasswordGenerator();

    String password = passwordGenerator.generatePassword(userChoice);

    // ...
  }

}
 类似资料:
  • 我正在尝试使用OpenSSL命令行界面创建基于椭圆曲线的证书。我正在通过在 CLI 中键入以下命令来生成密钥文件: 问题是尽管ECC密钥被成功地生成,但它没有用任何对称密码加密。但是,使用下面的命令加密RSA密钥非常简单: 是否像 RSA 密钥一样加密 ECC 密钥? 我尝试了“OpenSSL 0.9.8zh 2016年1月14日”和“OpenSSL 1.1.0g 2017年11月2日”多参数组合

  • 操作步骤: 菜单栏: Code —> Generate —> Constructor 快捷键: Mac: command + N Windows\/Linux: Alt + Insert —> Constructor

  • “Bericht”对象的单独类文件的一部分(荷兰语表示消息,包含一个字符串和两个日期): 在我的主方法的某个地方,我从这个类中创建新对象: 方法“printberichten”迭代数组列表并打印所有消息 getBericht getter方法: 因此,如果我创建一个新对象,我之前的所有对象都应该显示在text Area中,但我似乎只创建了我的类的一个实例。 在命令“lijst.add(this)”

  • 我想排序卡,但不知道如何使用构造函数将不同的卡类型与实际变量int类型连接起来。 "将卡的类型设置为类卡中的final static字段,以便可以通过例如卡来调用它们。EFFECT_MONSTER" 不允许枚举。

  • 我想使用生成器模式创建一个JoshuaBloch风格的类。但我想使用这个类作为DTO对象,并将其从EJB中传输。所以它需要有公共的无参数构造函数。如何在构建器模式中实现这种JavaBean风格?在有效的Java对象中,只有一个构造函数接受对象作为参数。若我添加了并没有参数的公共构造函数,那个么我就失去了构建器相对于JavaBean模式的优势。

  • 我想排序卡,但不知道如何使用构造函数将不同的卡类型与实际变量int类型连接起来。 “将卡的类型设置为类卡中的final static字段,以便可以通过例如Card.EFFECT_MONSTER调用它们。” 不允许使用枚举。