转载

Java随机数不是随机的?

我试图用 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个中的最后五个数字是:

您已经为随机生成器播种了一个常量值100.这是确定性的,因此每次运行都会生成相同的值.

我不确定为什么你选择用100播种它,但种子值与生成的值的范围无关(由其他方法控制,例如你已经拥有的nextInt调用).

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

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

Creates a new random number generator. This constructor sets the seed  of the random number generator to a value very likely to be distinct  from any other invocation of this constructor.

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

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

翻译自:https://stackoverflow.com/questions/16290026/java-random-numbers-not-random

原文  https://codeday.me/bug/20190113/513878.html
正文到此结束
Loading...