我无法理解以下代码

时间:2017-02-18 19:07:03

标签: java arrays

我不理解这些安全随机数如何转换为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]

4 个答案:

答案 0 :(得分:0)

从代码中很明显,随机数的值不会被写入数组。值被用作索引。如果假设第一个数组为零,则第一次迭代会将1 + 0写入随机数组元素(不包括0个元素)。以后它可能是随机元素的1 +值,在第二次迭代时将是1或2,在第3次 - 从1到3等等。

答案 1 :(得分:0)

让我们逐步完成此代码。

我们首先创建一个SecureRandom()实例。根据{{​​3}},这将让我们生成

  

加密强随机数

意味着它们会非常随机。如果您想知道这会避免什么,请阅读Javadocs

SecureRandom secureRandom = new SecureRandom();

现在我们将创建一个包含七个整数的数组,最初设置为0

int [] array = new int[7];

我们将运行for循环的内容五次。

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

循环的开始获得1到6之间的随机数,包括1和6,并将其分配给random

int random = 1+ secureRandom.nextInt(6);

我们现在在随机位置递增数组。请注意位置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作为索引。它将查看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(...);

这会将(几乎)随机位置的值设置为可能索引的相同范围内的随机值。

答案 2 :(得分:0)

这是关键路线:

<!DOCTYPE html>
<html ng-app="demoApp">
<script src="angular.min.js"></script>
<head>
    <title>main page</title>
</head>
<body>

<div ng-view></div>

<script>
var demo = angular.module('demoApp',[]);

demo.config(function ($routeProvider){
    $routeProvider
        .when ('foo',{
            controller : 'SimpleController',
            templateUrl: 'first.html'
        })      
    });

demo.controller('SimpleController',function($scope){
    $scope.customers = [
        {name: 'sac',city:'abcd'},
        {name: 'mac',city:'efgh'},
        {name: 'nalaka',city:'ijkl'}
    ];
});
</script>

</body>
</html>

一些随机元素第一次成为1 + 0。当我们第二次随机获得它时 - 它变为1 + 1,第三个 - 1 + 2等等。

答案 3 :(得分:0)

将数组的内容与数组中的位置混合,通过随机找到位置,并通过随机位置+1的内容找到内容。 如果要在数组中包含0到6的内容,则应使用

array[random] = secureRandom.nextInt(6)

而不是

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