繁体   English   中英

如何生成一个随机数?

[英]How to generate a Random number?

在我的android应用中,我需要生成随机数,

我的应用程序将在局域网中的许多android设备上运行,并使用随机数相互通信,我想生成这样一个随机且唯一的数字,该数字在局域网中的任何应用程序中都不应相同。

每当任何用户在其设备和整个LAN中生成它时,它都应该是唯一的。

任何想法,我将不胜感激???

给出了问题注释中的澄清后,我要做的是:建立一个(确定性)方案,以32位整数交换位。 交换任意数量。 将此称为“加扰器”。

然后只计算整数; 每个人都叫“加扰者”。

由于交换方案的确定性,唯一性得到保证,将是快速的,但在冷冻方面不是安全的。 但是请注意,通常这将具有较差的统计随机性,因此,当需要均匀分布的随机数(例如蒙特卡洛)时,切勿使用它。 但我认为它应该满足您的要求。

我对Android不熟悉。 但是,您的问题似乎可以通过UUID或通用唯一标识符解决。 一个快速的谷歌产生这个页面

特别是,您正在寻找randomUUID()方法,该方法根据RFC 4122生成变体2,版本4(随机生成的数字)UUID。

这是生成随机数的方法:

Random r = new Random();
int random = r.nextInt(100); // returns a value between 0 (incl) and 100 (excl)

Random r = new Random();
int random = r.nextInt(100) + 20; // returns a value between 20 (incl) and 120 (excl)

关于数字应该唯一的问题,您可以以某种方式保存每个生成的数字 然后,在绘制新的随机数时,如果已经生成了新的随机数,请检查保存的数字。 如果是这样,请重画。

Java随机文档: http : //docs.oracle.com/javase/6/docs/api/java/util/Random.html

我实际上发现您的要求是矛盾的。 有效的随机序列将不会生成唯一值,否则将不是随机的。 我的意思是,您根本不需要任何随机的东西,只需要数字是唯一的即可。

要为每个网络节点生成唯一的编号非常容易,将机器的ip或mac地址与时间相结合。 要获取时间,只需执行System.currentTimeMillis(); 要获取您的IP地址,请使用此处的示例, 以获取Java中的mac地址 将这两个数字结合起来将为您带来独特性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM