[英]JAVA Can someone explain this code for me? Auto-Gen
我在以下位置在線找到了這些代碼:
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
該行將為您提供數組letters
“字母”的索引。
int index = (int)(RANDOM.nextDouble()*letters.length());
因為RANDOM.nextDouble()將返回一個“分數”(0.0d(包括0.0d)到1.0d(不包括)),該分數乘以最后一個索引+ 1的大小,因此它將始終給出正確的索引。
pw += letters.substring(index, index+1);
將在索引index
處的字母添加到密碼。
將字母視為字符數組而不是字符串。 這將幫助您理解。
RANDOM.nextDouble()
將創建一個范圍從0.0到1.0的隨機雙精度數。 然后將其乘以您的String(字符數組)的長度,得到介於0.0和數組的最后一個索引之間的數字。
(int)
將此數字轉換為整數類型,該數字類型將舍去小數,剩下整數。 然后將該數字保存到索引。
pw += letters.substring(index, index+1);
在索引和該索引之后的索引之間切出字母String的一段。 本質上,它只是在該索引處獲取字符,並將其添加到您的pw String中。
然后,該函數返回您的pw字符串,它是隨機生成的字符串,字符串中可能包含字符,字符串的長度為PASSWORD_LENGTH
int index = (int)(RANDOM.nextDouble()*letters.length());
生成一個大於或等於0.0且小於1.0的隨機雙精度數。 然后,將結果乘以可接受的字母字符串的長度。 本質上,在這兩個步驟中,您的數字介於0(含)和有效“字母”的總數之間,但是它是雙精度的,因此它有一個小數部分。 該數字將轉換為整數(整數)並保存到index
變量中。
pw += letters.substring(index, index+1);
將pw
與letters
字符串的子字符串連接。 子字符串從上一行確定的索引處開始,到索引index + 1
(不包括index + 1
處的字符)結束。 本質上,此部分在由上面生成的隨機整數確定的索引處生成一個字符的子字符串。 然后將其串聯到現有的pw
字符串上。
步驟示例:
int index = (int)(RANDOM.nextDouble()*letters.length());
:
RANDOM.nextDouble()
=> 0.51 letters.length()
=> 60 RANDOM.nextDouble()*letters.length()
=> 30.6 (int)(RANDOM.nextDouble()*letters.length())
=> 30 pw += letters.substring(index, index+1);
:
letters.substring(index, index+1)
=>“ H” pw += letters.substring(index, index+1)
=>“” +“ H” =>“ H” 人們已經解釋了該代碼。 但我想指出,原始代碼效率極低。 您最好使用以下代碼(遵循相同的邏輯):
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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.