我不理解这些安全随机数如何转换为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)
从代码中很明显,随机数的值不会被写入数组。值被用作索引。如果假设第一个数组为零,则第一次迭代会将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];