【Java】随机数详解

Java中产生随机数的几种方式,随机数的概念从广义上讲,有三种:

1、通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字。

【PS:这个方法返回一个从1970年1月1号0点0分0秒到目前的一个毫秒数,返回类型是long,我们可以拿它作为一个随机数,拿它对一些数取模,就可以得到我们想要的一些范围内随机数】

2、通过Math.random()返回一个0到1之间的double值。

【PS:这个产生的随机数是0-1之间的一个double,我们可以把他乘以一定的倍数来得到想要的效果,比如说乘以10,他就是个10以内的随机数】

3、通过Random类来产生一个随机数,这个是专业的Random工具类,功能强大。

【PS:我们可以通过新建一个Random的对象来产生随机数,他可以产生随机整数、float、double、long型随机数】

因为方法3是我们日常项目中比较常用的一种,也是使用范围比较广的一种,所以我们这里重点讲讲第三种方法Random类来产生一个随机数。

java.util.Random类有两种构建方式:带种子和不带种子 。

不带种子

这种方式将会返回随机的数字,每次运行结果不一样:

输出结果是:

带种子

无论程序运行多少次,返回结果都是一样的【老九君亲测有效】:

输出结果,两次结果均相同,重复运行也均是同样的结果:

两种方式的差别在于?

我们先来看看API怎么说:

Random()  创建一个新的随机数生成器。 Random(long seed)  使用单个 long 种子创建一个新随机数生成器: public Random(long seed) { setSeed(seed); } next 方法使用它来保存随机数生成器的状态。

通俗说,两者的区别是:

带种子的,每次运行生成的结果都是一样的。如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。

不带种子的,每次运行生成的都是随机的,没有规律可言。

创建不带种子的Random对象:

Random random = new Random();

创建不带种子的Random对象有两种方法:

1) Random random = new Random(555L);

2) Random random = new Random();

random.setSeed(555L);

Random对象的nextInt(),nextInt(int n)方法的说明:

1.int nextInt():  

返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的int值。

2.int nextInt(int n): 返回一个伪随机数,它是从此随机数生成器的序列中取出的、在 0(包括)和指定值(不包括)之间均匀分布的 int值。 如下所示ran.nextInt(10):

打印结果如下,生成了0~9之间的随机整数:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏mathor

科学计算库Numpy

 genfromtxt函数里穿了三个参数,分别是 要打开的文档名称,分隔符,以什么类型存储  打印结果:

874
来自专栏IT杂记

求一个数组中子数组的最大和算法(Java实现)

    前几天在微信订阅号“待字闺中”中看到的一篇文章《小技巧求一个数组中子数组的最大和》,提供下Java的实现,并且在对题目做下小修改,本来打算直接在微信里直...

2008
来自专栏静默虚空的博客

排序五 简单选择排序

要点 简单选择排序是一种选择排序。 选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。 简单排序处理流程 ...

1839
来自专栏决胜机器学习

《编程之美》读书笔记(一)——中国象棋将帅有效位置

《编程之美》读书笔记(一) ——中国象棋将帅有效位置 (原创内容,转载请注明来源,谢谢) 一、问题 ? 如上述棋盘,假设将为点A,帅为点B。将只能在d10...

3576
来自专栏杂七杂八

matlab中的函数介绍(max,min,unidrnd,norm)

遇到不知道的函数时,可以使用help 函数名来查看帮助 1 求矩阵A的最大值的函数有3种调用格式,分别是: max(A):返回一个行向量,向量的第i个元...

3305
来自专栏python学习之旅

算法笔记(八):复杂度分析(二)

#感兴趣的可以去订阅极客时间前谷歌工程师的专栏:数据结构与算法之美,个人觉得写的很不错。这里只是我自己做的一个简单的笔记

212
来自专栏青枫的专栏

C语言中%d,%p,%u,%lu等都有什么用处

%d   有符号10进制整数(%ld 长整型,%hd短整型 ) %hu   无符号短整形(%u无符号整形,%lu无符号长整形) %i    有符号10进制整数 ...

351
来自专栏Java Edge

美团18春招编程笔试题赏析1 字符串距离2 数字字符

2808
来自专栏大数据风控

Python中字段抽取、字段拆分、记录抽取

1、字段抽取 字段抽取是根据已知列数据的开始和结束位置,抽取出新的列 字段截取函数:slice(start,stop) 注意:和数据结构的访问方式一样,开始位置...

1988
来自专栏逆向技术

逆向知识十三讲,汇编中数组的表现形式,以及还原数组

            逆向知识十三讲,汇编中数组的表现形式,以及还原数组 讲解数组之前,要了解数组的特性 1.数据具有连续性 2.数据类型相同 比如:   i...

1867

扫码关注云+社区