递归随机密码生成器

时间:2015-05-06 22:37:13

标签: java recursion random passwords int

我正在尝试在java中编写一个递归密码生成程序,但是控制台不是返回一个随机生成的密码,而是吐出密码的每一个组合并继续运行。

*另外,我要求密码中至少有一个大写字母,这就是我随机生成一个或零的原因。

问题:如何使这个递归方法只打印出一个随机生成的randomSize长度的密码?如何根据randomCapital是否为1来制作char大写?

CODE:

public class PasswordGenerator{

  public static void main(String[] args) {

      Random rand = new Random();
      int randomSize = rand.nextInt((13) + 8);

      generatePassword("", 0, randomSize);

  }


  public static char[]chars = {'a','b','c','d','e','f','g','h','i','j','k','l','m',
    'n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5',
    '6','7','8','9','!','@','$','%','^','&'};

  public static void generatePassword(String password, int position, int size)
  {
      Random rand = new Random();
      int randomCapital = rand.nextInt(1);

      if(position < size && randomCapital == 0)
      {
          for(char ch: chars)
          {
              generatePassword(password + ch, position + 1, size);
          }
          if(position < size && randomCapital == 1)
          {
             for(char ch: chars)
             {
                //how can I make this char capital if randomCapital is 1?
                generatePassword(password + ch, position + 1, size);
             }
         }          
      }
      else
          System.out.println(password);
   }
}

1 个答案:

答案 0 :(得分:0)

您正在生成密码的每个组合,因为您在递归堆栈的每个级别遍历char数组中的每个值,而不是为数组选择随机值。

constexpr