java范围随机数
我们经常说Java中的随机数是伪随机数,那么我们要知道什么是伪随机数。
什么是伪随机数?
1、真正意义上的随机数在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。这才是真随机。
2、计算机中的随机函数是按照确定算法模拟产生的,其结果是确定的,是可见的,我们可以这样认为这个可预见的结果其出现的概率是100%,所以被称为伪随机。
Java随机数产生原理:
Java的随机数产生用了线性同余公式等,也就是说通过一个复杂的算法生成的。如果感兴趣,可以去看一下这篇对java随机数源码解析的博客。http://www.codes51.com/article/detail_1581162_5.html
Java产生随机数的方法有两种:
1、Math.random()
2、new Random()
java.lang.Math.Random:
Math.Random()函数能够返回0-1之间的double值,在该范围内(近似)均匀分布。
java.util.Random:
Random()有两种构造方法:
1、Random():使用一个和当前时间的毫秒数作为种子,可以通过System.currentTimeMillis()来获得当前时间的毫秒数。下面是JDK的源代码。
public Random() { this(System.currentTimeMillis()); }。
2、 Random(long seed):直接传入一个种子,如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。
random对象的nextInt(),nextInt(int n)方法:
int nextInt()
返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
int nextInt(int n)
返回一个伪随机数,它是从此随机数生成器的序列中取出的、在 [0,1) 之间均匀分布的 int值。
下面是带种子不带种子两种构造方法生成[1,100]的随机数的代码:
1 //生成[1,100]的随机数
2 classrandom_test{3 public static voidmain(String[] args){4 Random r = newRandom();5 System.out.println("不带种子:");6 for(int i = 1; i <= 10; i++){7 System.out.print(r.nextInt(100)+1+" ");8 }9 System.out.println();10
11 System.out.println("带种子:");12 r = new Random(100);13 for(int i = 1; i <= 10; i++){14 System.out.print(r.nextInt(100)+1+" ");15 }16 System.out.println();17 }18 }
以下是运行两次的结果,结果很清晰,带种子的生成的结果是相同的:
由于nextInt(100)是生成 [0,100) 的随机数,但我们要生成 [1,100] 的,所以nextInt(100)+1;
要生成[22,99]的随机数,则nextInt(78)+22。
作者:极客有车
来源链接:https://blog.csdn.net/weixin_36187176/article/details/114041354
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。