java生成随机数组_Java 生成随机数

本文详细介绍了Java中的Random类,包括next系列方法的功能和用法,如生成不同范围的随机数、随机布尔值、随机浮点数等。通过实例展示了指定种子对生成随机数序列的影响,指出不指定种子时的随机性。最后比较了Math.random()和Random类的差异,建议在需要更多灵活性时使用Random类。
摘要由CSDN通过智能技术生成

1.protected int next(int bits)://生成下一个伪随机数。

2.boolean nextBoolean()://返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的boolean值。

3.void nextBytes(byte[] bytes)://生成随机字节并将其置于用户提供的 byte 数组中。

4.double nextDouble()://返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布的 double值。

5.float nextFloat()://返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布float值。

6.double nextGaussian()://返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的double值,其平均值是0.0标准差是1.0。

7.int nextInt()://返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。

8.int nextInt(int n)://返回一个伪随机数,它是取自此随机数生成器序列的、在(包括和指定值(不包括)之间均匀分布的int值。

9.long nextLong()://返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。

10.void setSeed(long seed)://使用单个 long 种子设置此随机数生成器的种子。

方法摘要也就这些,下面给几个例子:

1.生成[0,1.0)区间的小数:double d1 = r.nextDouble();

2.生成[0,5.0)区间的小数:double d2 = r.nextDouble() * 5;

3.生成[1,2.5)区间的小数:double d3 = r.nextDouble() * 1.5 + 1;

4.生成-231到231-1之间的整数:int n = r.nextInt();

5.生成[0,10)区间的整数:

int n2 = r.nextInt(10);//方法一

n2 = Math.abs(r.nextInt() % 10);//方法二

前面曾讲到过构造Random对象的时候指定种子的问题,到底指定种子有什么作用呢,这里直接用代码例子来做说明:

4c0da85a3d06b47f82e356bb016486b6.png

在定义的时候分别指定了相同的种子之后,在分别用r1和r2去[0,30)的随机数,结果编译执行后悔发现结果都是呈现AABB型的,说明r1和r2取的随机数是一模一样的(下图为实验截图)。

c2896a37eaae3cec1fc50ebc6175b0a2.png

如果我改动代码,改成下面这样:

2e171b5a366e25a772f318a458846f07.png

再编译输出后,就再也不会得到AABB型的结果,根据代码的区别,就可以知道指定种子数,和不指定种子数的区别在于哪里了。

b7e35a7ee234dac58cf2c2bfc922195d.png

最后再来简单对比一下这两个随机函数到底的特点:

1.java.Math.Random()实际是在内部调用java.util.Random()的,它有一个致命的弱点,它和系统时间有关,也就是说相隔时间很短的两个random比如:

double a = Math.random();

double b = Math.random();

即有可能会得到两个一模一样的double。

2.java.util.Random()在调用的时候可以实现和java.Math.Random()一样的功能,而且他具有很多的调用方法,相对来说比较灵活。所以从总体来看,使用java.util.Random()会相对来说比较灵活一些。

reference:

https://www.cnblogs.com/uncle-box/p/5918743.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值