当前位置: 首页 > 知识库问答 >
问题:

作为For循环语句的随机nextInt()产生预期随机值的一半

谢弘阔
2023-03-14
Random randomWorker = new Random();
int temp = randomWorker.nextInt((120)+1);
for(int i=0; i<temp; i++){
... //I create a list in this loop
}
System.out.println(createdList.length());

这将起作用,并产生一个预期随机长度的列表-从1到120的值。但是,以下代码不是:

Random randomWorker = new Random();
for(int i=0; i<randomWorker.nextInt((120)+1); i++){
... //I create a list in this loop, identical code as in the example above
}
System.out.println(createdList.length());

重复了一亿次,几次,保存的值最多是62个。

造成这种差异的原因是什么?

共有1个答案

丘华翰
2023-03-14

看看这个!

for(A; B; C) { }

在您的示例中:

  • A->int i=0表达式将在第一次迭代(即一次)之前执行
  • b->i domworker.nextint((120)+1)< ode=""> 和 c->i++表达式将在每次迭代(即多次)后执行。
for(int i = 0, total = new Random().nextInt(121); i < total; i++){
    // ...
}

 类似资料:
  • 随机数有着广泛的用途。比如测试、游戏、仿真以及安全等领域都需要用到随机数。标准库所提供的多种可供选择的随机数产生器也恰恰反应了随机数应用范 围的多样性。随机数产生器由引擎(engine)和分布(distribution)两部分组成。其中,engine用于产生一个随机数序列或者伪随机数 序列;distribution则将这些数值映射到位于固定范围的某一数学分布中。关于分布的例子有:unifrom_i

  • 我正在尝试使用For循环将一个随机整数(0-2)添加到一个变量中指定的次数。我遇到的问题是,循环不是每次循环时都使用一个新的随机数,所以,如果我输入9,我只能得到0、9,或者18。 我希望一个对象返回的键“a”和“b”具有不同的数值。

  • 本文向大家介绍C#产生随机双,包括了C#产生随机双的使用技巧和注意事项,需要的朋友参考一下 示例 生成介于0和1.0之间的随机数。(不包括1.0)            

  • 问题内容: 我正在寻找一个随机数,并将其发布到特定user_id的数据库表中。问题是,相同的数字不能使用两次。有上百万种方法可以做到这一点,但是我希望对算法非常热衷的人能够以一种优雅的解决方案巧妙地解决问题,因为它满足以下条件: 1)最少查询数据库。2)通过内存中的数据结构进行的爬网次数最少。 本质上,这个想法是要执行以下操作 1)创建一个从0到9999999的随机数 2)检查数据库以查看该数字是

  • aliyun 的 redis lua 的随机值不随机!? 同样的函数,在 redis 官方的 7.2.1 下面是每次都可以取到随机的 cookie 但是在 aliyun 的 redis 下面,每次取到的值都是一样的

  • 问题 你需要生成在一定范围内的随机数,但你也需要对发生器进行“生成种子”操作来提供可预测的值。 解决方案 编写你自己的随机数生成器。当然有很多方法可以做到这一点,这里给出一个简单的示例。 该发生器绝对不可以以加密为目的! class Rand # 如果没有种子创建,使用当前时间作为种子 constructor: (@seed) -> # Knuth and Lewis' impro