2017-02-18 99 views
1

我不理解這些安全隨機數如何轉換爲1並自動重新排列爲數組。我無法理解以下代碼

SecureRandom secureRandom = new SecureRandom(); 

int [] array = new int[7]; 

for(int i=0; i<5;i++) 
{ 
    int random = 1+ secureRandom.nextInt(6); 
    array[random]=1+array[random]; 
    System.out.println(Arrays.toString(array)); 
} 

輸出:

[0, 0, 0, 0, 0, 1, 0] 
[0, 1, 0, 0, 0, 1, 0] 
[0, 1, 0, 0, 0, 1, 1] 
[0, 1, 0, 0, 0, 1, 2] 
[0, 2, 0, 0, 0, 1, 2] 
+0

我不理解你的問題是什麼。 –

+0

我建議你逐步調試調試器中的代碼,以確切查看每行代碼在做什麼。 –

+0

你問'array [random]'是如何工作的? –

回答

0

讓我們逐步完成此代碼。

我們從創建SecureRandom()的實例開始。按照Javadocs,這會讓我們產生

保密性強的隨機數

這意味着他們將是很隨意的。如果你想知道這可以避免什麼,請閱讀pseudorandom number generators。現在

SecureRandom secureRandom = new SecureRandom(); 

我們將創建七個整數數組,最初設置爲0

int [] array = new int[7]; 

我們將運行for循環的內容五次。

for(int i=0; i<5;i++) 

循環的開始獲取1和6(含)之間的隨機數,並將其分配給random。我們現在增加數組在隨機位置。請注意0​​的位置永遠不會更新,因爲它不在random的可能值範圍內。

在每個循環結束時,我們將數組的內容打印到std-out,讓我們看看循環每次增加一個元素。這也是爲什麼你看到整個陣列的五個打印。 Arrays.toString將數組轉換爲您看到的逗號分隔版本。

System.out.println(Arrays.toString(array)); 

編輯:

從我在您的意見明白,你想知道爲什麼通過代替1的陣列更新的值將成爲隨機數。

該陣列由索引表示如下:

array: { array[0], array[1], array[2], array[3], array[4], array[5], array[6] } 

當我們訪問與array[random]陣列,我們使用random作爲索引。它將查看隨機數值,並在上面的[ ]中使用相同的數字進行匹配。然後,因爲您說的是1 + array[random],它只會將數組中該位置的值更改爲1

編輯X2:如果你想其他的輸出,你需要的for循環的內容是:

int random = 1 + secureRandom.nextInt(6); 
int anotherRandom = 1 + secureRandom.nextInt(6); 
array[random] = anotherRandom; 
System.out.print(...); 

這將(幾乎)隨機位置的值設置爲隨機值在可能的指標的相同範圍內。

+0

我想知道代替該[0,0,0,0,0,1,0] [0,1,0,0,0,1,0] [0,1,0,0,0 ,1,1] [0,1,0,0,0,1,2] [0,2,0,0,0,1,2]輸出爲什麼不這樣給我這個輸出[0, 0,0,0,0,5,0] [0,2,0,0,0,5,0] [0,2,0,0,0,5,6] [0,2 0,0,0,5,6] [0,2,0,0,0,5,6] –

+0

如果數組長度大於7,如100隨後會發生什麼?它計數[int random = 1+ secureRandom.nextInt(6); ]隨機長度1到6,因爲它的數組長度? –

+0

如果在不修改原始代碼或我的EDIT x2代碼中的隨機數生成的情況下使數組長度超過7,則只有數組[1]至數組[6](含)中的數字將變爲非零。意味着所有新職位將保持爲零。 –

0

正是從這一隨機數的值不會寫入到陣列..值被用作索引碼明顯。如果假設第一個數組爲零,那麼第一次迭代會將1 + 0寫入隨機數組元素(不包括0元素)。後來它可能是1 +隨機元素的值,它在第二次迭代將是1或2,在3 - 從1到3等。

0

這是關鍵行:

array[random]=1+array[random]; 

一些隨機元素變成1周+ 0第一次。當我們第二次隨機獲得它 - 它變成了1 + 1,在第三 - 1 + 2等。

0

您將數組的內容與數組中的位置混合,該位置通過隨機找到並且內容由一個隨機位置的內容+1。 如果你想擁有從0到6的陣列內的內容,你應該使用的

array[random] = secureRandom.nextInt(6) 

代替

array[random]=1+array[random];