Java中的随机数是否真的不可预测?

M0ε*_*εiπ 2 java random generator

有一些方法可以在java中生成随机数

其中之一是这样的:

Random rand=new Random();
int randomInteger=rand.nextInt();
Run Code Online (Sandbox Code Playgroud)

现在我的问题是:我们可以预测下一个随机数吗?


4个答案后编辑:

我真正的问题是:

我正在开发一个Snake Game(Linux中的半字节),我正在编程蛇移动,现在我想知道是否有可能预测苹果将出现的下一个地方.

可能吗?

T.J*_*der 5

如果您确切地知道System.currentTimeMillis在您打电话时会返回什么new Random()new Random()new Random(System.currentTimeMillis()) ,那么您不仅可以预测它,还可以完全了解它.那是因为它是一个快捷方式,用于设置伪随机生成器的种子.(好吧,这就是我上次查看源代码时所做的事情 ;文档实际上并没有说它必须使用它.)如果你知道使用的种子new Random().伪随机生成器是确定性的,如果你知道种子,你就知道序列.更新:查看Java 6源代码[我没有Java 7源代码],默认种子是种子数的组合,在使用时递增,加上System.nanoTime.所以你需要知道这两个.提高标准.

如果您知道使用的种子System.currentTimeMillis()何时new Random()发生的确切值new Random(),那么确实预测下一个值将是非常困难的.这就是伪随机生成器的重点.我不会说这是不可能的.真的,真的很难做到任何程度的信心.


问题编辑后更新:这是可能的,但非常非常困难,并且在这样做的方式允许玩家提高他们在游戏中的得分,我会说你可以忽略它.