2017-02-18 103 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];