当前位置: 首页 > 面试题库 >

Java随机数不是随机的吗?

倪举
2023-03-14
问题内容

当他每次运行程序时都不断获得相同的数字时,我试图向Java解释随机数生成器。我为同一件事创建了自己的简单版本,每次运行该程序时,我也得到了与他得到的确切数字相同的数字。

我究竟做错了什么?

import java.util.*;

public class TestCode{
   public static void main(String[] args){
       int sum = 0;
       Random rand = new Random(100);
       for(int x = 0; x < 100; x++){
           int num = (rand.nextInt(100)) + 1;
           sum += num;
           System.out.println("Random number:" + num);
       }
       //value never changes with repeated program executions.
       System.out.println("Sum: " + sum); 
   }

}

100个数字中的最后五个数字是:

40
60
27
56
53

问题答案:

您已经为随机数生成器提供了恒定的值100。它是确定性的,因此每次运行都会生成相同的值。

我不确定您为什么选择使用作为种子100,但是种子值与生成的值范围无关(这是由其他方式控制的,例如nextInt您已经拥有的调用)。

要每次获取不同的值,请使用Random不带参数的构造函数,该构造函数使用系统时间作为随机生成器的种子。

从Javadoc引用无参数Random构造函数:

创建一个新的随机数生成器。该构造函数将随机数生成器的种子设置为一个很有可能与该构造函数的其他调用不同的值。

引用无参数Random构造函数中的实际代码:

public Random() {
    this(seedUniquifier() ^ System.nanoTime());
}


 类似资料:
  • 问题内容: 我正在尝试在Java中生成盐,以与用于安全密码存储的哈希算法配合使用。我正在使用以下代码创建随机盐: 这应该生成一个完全安全的,随机生成的盐,以用于我的哈希算法。但是,当我运行代码时,每次都会输出相同的盐…表示生成的盐根本不是随机的。 出于明显的安全性目的,每个用户都需要一个唯一的符号,但是如果我每次创建一个新帐户时都使用此代码,则每个用户都将具有相同的符号,这一开始就破坏了它的用途。

  • 我正在尝试模拟我在上面发现的数学难题http://blog.xkcd.com/2010/02/09/math-puzzle/.然而,java random类返回了奇怪的结果。在下面的代码中,结果是预期的。第一行的输出大约为.612,第二行的输出介于.49和.51之间。int试验=10000000;int成功=0; 然而,当我切换 到 第一个数字的输出约为 .476,第二个数字的输出约为 .710。

  • 一个简单的新手问题,奇怪的是我一直没能找到解决方法。

  • 问题内容: 在python文档中,“ set.pop()从s中删除并返回任意元素”。在生成一些随机数据以测试程序时,我注意到此pop()函数的异常行为。这是我的代码(python 2.7.3): 我在这里做的是 在每个元素的范围为[0,)的集合中插入一些随机值 从集合中弹出一个元素(根据文档,它应该是随机的) 计算集合中有多少元素小于弹出值 我希望弹出的值应该是随机数,并且集合中大约50%的数字会

  • 每次产生一个随机数。 用法 Your browser does not support the video tag. 案例:掷骰子 功能:设置随机数范围1-6,每按一下按钮,产生一个随机数 工作原理 当输入由no变为yes时,一个随机数将会被传送到输出。你可以通过配置改变随机数的范围 例如:一个随机变色的灯

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