首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中随机数真的是unPredictable吗?

问在Java中随机数真的是unPredictable吗?
EN

Stack Overflow用户
提问于 2012-04-07 14:22:02
回答 4查看 2.4K关注 0票数 2

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

其中之一是:

代码语言:javascript
复制
Random rand=new Random();
int randomInteger=rand.nextInt();

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

经过4次答复后编辑:

我真正的问题是:

我正在做一个蛇游戏(Linux中的小吃),我正在编程让蛇移动,现在我想知道是否有可能预测苹果会出现在下一个地方。

有可能吗?

EN

回答 4

Stack Overflow用户

发布于 2012-04-07 14:28:35

随机类产生的“随机”数是通过算法生成的,因此实际上是伪随机数。所以,理论上,你可以预测下一个数字。然而,知道随机产生的一个数字,甚至是一系列的数字,都不足以预测下一个数字;你还需要知道随机对象正在使用的种子,并且需要遵循它的伪随机数生成算法。

如果你想要一组可重复的“随机”数字,你可以在创建一个随机的实例时指定你自己的种子。

代码语言:javascript
复制
Random rand = new Random(1234); // Replace 1234 with any value you'd like

每次你用相同的种子实例化随机,你就会得到相同的数列。例如,您可以编写一个小的命令行程序,用一些种子实例化随机,并打印它返回的数字列表,然后在代码中用相同的种子实例化随机。然后,您将知道您的代码将接收的数字和顺序。这对于调试来说非常方便。

票数 2
EN

Stack Overflow用户

发布于 2012-04-07 14:30:17

在像计算机这样的确定性设备上不可能有真正的随机数。但。

如果您想要密码安全的随机数,请使用SecureRandom:http://docs.oracle.com/javase/6/docs/api/java/security/SecureRandom.html

随机使用确定性算法:

如果用相同的种子创建两个随机实例,并对每个实例执行相同的方法调用,则它们将生成和返回相同的数字序列。

http://docs.oracle.com/javase/6/docs/api/java/util/Random.html#Random

票数 1
EN

Stack Overflow用户

发布于 2012-04-07 14:31:32

本质上,如果你知道随机数发生器的种子,你就可以肯定地预测整个序列。如果你没有,无论你生成多少个数字,都无法准确地预测下一个数字。

请注意,如果您依赖的数字是不可预测的安全性,您应该使用java.secure.SecureRandom而不是java.util.Random。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10055249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档