JAVA有人可以帮我解释这段代码吗?自动根

时间:2014-06-27 17:58:19

标签: java random passwords temporary

我在网上找到了这些代码:

http://www.java2s.com/Code/Java/Security/GeneratearandomStringsuitableforuseasatemporarypassword.htm

但我不太确定代码'逻辑。

public static String generateRandomPassword()
{

      String letters = "abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789";

      String pw = "";
      for (int i=0; i<PASSWORD_LENGTH; i++)
      {
          int index = (int)(RANDOM.nextDouble()*letters.length());
          pw += letters.substring(index, index+1); 
      }
      return pw;
}

有人可以为我解释这两行代码,以便我能更好地理解吗?

int index = (int)(RANDOM.nextDouble()*letters.length());
pw += letters.substring(index, index+1); 

谢谢。 :d

4 个答案:

答案 0 :(得分:0)

此行将为您提供&#34;字母&#34;的索引。在数组letters

int index = (int)(RANDOM.nextDouble()*letters.length());

因为RANDOM.nextDouble()会返回&#34;分数&#34; (0.0d(含)到1.0d(不包括))乘以大小,即最后一个索引+ 1,因此它总是给出一个合适的索引。

pw += letters.substring(index, index+1);

将索引index的字母添加到密码中。

答案 1 :(得分:0)

将字母视为字符数组而不是字符串。这有助于您理解。

RANDOM.nextDouble()

将从0.0到1.0的范围内创建一个随机双精度数。然后将它乘以String(字符数组)的长度,得到一个介于0.0和数组最后一个索引之间的数字。

(int)

将此数字转换为整数类型,这将截断小数,为您留下一个整数。然后将此号码保存到索引。

pw += letters.substring(index, index+1);

在索引和索引之后的索引之间删除一段字母String。从本质上讲,它只是抓取该索引处的字符,并将其添加到您的pw String。

该函数然后返回你的pw字符串,这是一个随机生成的字符串,字符串中可能有字符,长度为PASSWORD_LENGTH

答案 2 :(得分:0)

int index = (int)(RANDOM.nextDouble()*letters.length());生成大于或等于0.0且小于1.0的随机双精度数。然后它将结果乘以可接受字母串的长度。基本上,在这两个步骤中,您的数字介于0(包括)和有效&#34;字母&#34;之间,但它是一个双精度数,因此它有一个小数部分。该数字被转换为int(整数)并保存到index变量中。

pw += letters.substring(index, index+1);使用pw字符串的子字符串连接letters。子串从上面一行确定的索引开始,到index + 1结束(不包括index + 1处的字符)。本质上,此部分在索引处生成一个字符的子字符串,该字符串由上面生成的随机整数确定。然后它将它连接到现有的pw字符串。

步骤示例:

int index = (int)(RANDOM.nextDouble()*letters.length());

  1. RANDOM.nextDouble() =&gt; 0.51
  2. letters.length() =&gt; 60
  3. RANDOM.nextDouble()*letters.length() =&gt; 30.6
  4. (int)(RANDOM.nextDouble()*letters.length()) =&gt; 30
  5. pw += letters.substring(index, index+1);

    1. letters.substring(index, index+1) =&gt; &#34; H&#34;
    2. pw += letters.substring(index, index+1) =&gt; &#34;&#34; +&#34; H&#34; =&GT; &#34; H&#34;

答案 3 :(得分:0)

人们已经解释了代码。但我想指出原始代码效率极低。你最好使用这段代码(遵循相同的逻辑):

static final char[] LETTERS = {'a', 'b', ..., '7', '8', '9'};
static final int WIDTH = LETTERS.length;
public static String generateRandomPassword()
{     
  char[] pw = new char[PASSWORD_LENGTH];
  for (int i=0; i<PASSWORD_LENGTH; i++)
  {
      pw[i] = LETTERS[RANDOM.nextInt(WIDTH)];
  }
  return new String(pw);
}