Java随机数不是随机的?

lei*_*ero 8 java random

我试图用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); 
   }

}
Run Code Online (Sandbox Code Playgroud)

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

40
60
27
56
53
Run Code Online (Sandbox Code Playgroud)

rge*_*man 23

您已使用常量值为随机生成器播种100.它是确定性的,因此每次运行都会产生相同的值.

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

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

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

创建一个新的随机数生成器.此构造函数将随机数生成器的种子设置为非常可能与此构造函数的任何其他调用不同的值.

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

public Random() {
    this(seedUniquifier() ^ System.nanoTime());
}
Run Code Online (Sandbox Code Playgroud)