【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 条评论
登录 后参与评论

相关文章

来自专栏前端吧啦吧啦

数据结构(二)之算法基础

3817
来自专栏人工智能头条

70个NumPy练习:在Python下一举搞定机器学习矩阵运算

1792
来自专栏kalifaの日々

线段树 BIT 求冒泡排序的交换次数

线段树特别适合与区间相关的运算,比如MRQ(minimum range query)求一段区间内的最小值。 BIT可以看作是压缩了的线段树,由于(某类)线段树...

3588
来自专栏程序生活

连续子数组的最大和

题目1 连续子数组的最大和 描述: 输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度...

2855
来自专栏tkokof 的技术,小趣及杂念

OpenGL ES Shading Language 2.0 参考笔记

声明 struct matStruct { vec4 ambientColor; vec4 diffuseColor; ...

591
来自专栏King_3的技术专栏

leetcode-884-两句话中的不常见单词

给定两个句子 A 和 B 。 (句子是一串由空格分隔的单词。每个单词仅由小写字母组成。)

953
来自专栏前端儿

三角形面积

输入每行是一组测试数据,有6个整数x1,y1,x2,y2,x3,y3分别表示三个点的横纵坐标。(坐标值都在0到10000之间) 输入0 0 0 0 0 0表示输...

1202
来自专栏个人随笔

房上的猫:二维数组

二维数组是数组的数组。 二维数组基础   基本的定义方式有两种形式,如:   int [][] i = new int[2][3];(推荐)   int i...

2878
来自专栏前端吧啦吧啦

数据结构(二)之算法基础

1184
来自专栏C/C++基础

C++11新特性——range for

很多编程语言都有range for语法功能,自C++11起,终于将这个重要功能加入C++标准中。range for语句,可以方便的遍历给定序列中的每个元素并对其...

892

扫码关注云+社区