【JavaSE API 】生成随机数的2种方法:Random类和Math类的Random方法

生成随机数的两种方法

Random类和Math类的random方法都可以用来生成随机数
而Math类的random方法则是基于系统时间的伪随机数生成器,大于等于0.0小于1.0的随机double值范围[0,1)。例如: double num1 = Math.random() * 5 + 4;//范围[4,9)
Random类是基于种子的伪随机数生成器,有含参数和不含参数两种构造方式,不含参数的构造方法每次都使用当前系统时间作为种子,而含餐构造是使用一个固定值(参数n)作为种子范围[0,n)。例如:Random rd1 = new Random(); double num2 = rd1.nextDouble(); Random rd2 = new Random(10); double num3 = rd2.nextDouble();

Math.random() 无参调用,返回值为 double,大于等于 0.0 ,小于 1.0。范围[0.0,1.0)

static double random​() 返回值为 double的正值,大于等于 0.0 ,小于 1.0 。

double randomDouble = Math.random(); // 生成[0,1)之间的随机小数
int randomNumber = (int) (2 + Math.random() * 101); // 生成[2,103)之间的随机整数

Random类对象的next()方法,可有参。从这个随机数生成器的序列返回下一个伪随机数,均匀分布的 int值。

protected int next​(int bits) 生成下一个伪随机数。  
boolean nextBoolean​() 从该随机数生成器的序列返回下一个伪随机数,均匀分布的 boolean值。  
void nextBytes​(byte[] bytes) 生成随机字节并将它们放入用户提供的字节数组中。  
double nextDouble​() 返回下一个伪,均匀分布 double之间价值 0.0和 1.0从这个随机数生成器的序列。  
float nextFloat​() 返回下一个伪,均匀分布 float之间价值 0.0和 1.0从这个随机数生成器的序列。  
double nextGaussian​() 从该随机数发生器的序列返回下一个伪随机数,高斯(“正”)分布的 double值,平均值为 0.0 ,标准偏差为 1.0 。  
int nextInt​() 从这个随机数生成器的序列返回下一个伪随机数,均匀分布的 int值。  
int nextInt​(int bound) 返回伪随机的,均匀分布 int值介于0(含)和指定值(不包括),从该随机数生成器的序列绘制。  
long nextLong​() 返回下一个伪随机数,从这个随机数发生器的序列中均匀分布 long值。  
 public static void main(String[] args) {//测试一下生成随机数的两种方法int i = 0;for (i = 0; i < 10000; i++) {System.out.println("=====================================");double numDouble1 = Math.random();int numInt1 = (int)(Math.random()*(10));System.out.println("Math.random的随机浮点数[0.0,1.0):" + numDouble1);System.out.println("Math.random的随机整数[0,9]" + numInt1);System.out.println("---------------------------------------");Random rd = new Random();double numDouble2 = rd.nextDouble();int numInt2 = rd.nextInt();int numInt3 = rd.nextInt();int numInt4 = rd.nextInt(4);int numInt5 = rd.nextInt(4);System.out.println("Random对象的无参随机浮点数[0.0,1.0]:" + numDouble2);//不知道边界情况,没人说过,只说之间。不管了,反正都用Math类System.out.println("Random对象的无参随机整数[-整数,整数]:"  + numInt2 + "," + numInt3);System.out.println("Random对象的参数构造[0,4):" + numInt5 + "," + numInt4);}System.out.println("执行" + i + "次");}
}

Random有参构造后,调用方法生成随机数,数完全相同

只要Random构造的参数固定,生成的随机数也固定,完全不随机。不推荐使用

System.out.println("--------------------------------------");Random rd1 = new Random(10);double numDouble3 = rd1.nextDouble();Random rd2 = new Random(10);double numDouble4 = rd2.nextDouble();System.out.println("参数10的Random对象生成的随机浮点数" + numDouble3 + "," + numDouble4);//因为种子相同,所以生成的数也相同System.out.println("参数10的Random对象生成的随机整数[0,5):" + numInt6 );

其中三次运行结果

=====================================
Math.random的随机浮点数[0.0,1.0):0.7142916697602802
Math.random的随机整数[0,9]:6
---------------------------------------
Random对象的无参随机浮点数[0.0,1.0]:0.6315568322991557
Random对象的无参随机整数[-整数,整数]:73848388,929911462
Random对象的参数构造[0,4):0,0
--------------------------------------
参数10的Random对象生成的随机浮点数:0.7304302967434272,0.7304302967434272
参数10的Random对象生成的随机整数[0,5):3
=====================================
Math.random的随机浮点数[0.0,1.0):0.6622105346737387
Math.random的随机整数[0,9]:4
---------------------------------------
Random对象的无参随机浮点数[0.0,1.0]:0.7790519044760864
Random对象的无参随机整数[-整数,整数]:-1185189383,-718067040
Random对象的参数构造[0,4):2,2
--------------------------------------
参数10的Random对象生成的随机浮点数:0.7304302967434272,0.7304302967434272
参数10的Random对象生成的随机整数[0,5):3
=====================================
Math.random的随机浮点数[0.0,1.0):0.4240920821616745
Math.random的随机整数[0,9]:8
---------------------------------------
Random对象的无参随机浮点数[0.0,1.0]:0.36926846454559725
Random对象的无参随机整数[-整数,整数]:1829129943,120476504
Random对象的参数构造[0,4):2,0
--------------------------------------
参数10的Random对象生成的随机浮点数:0.7304302967434272,0.7304302967434272
参数10的Random对象生成的随机整数[0,5):3

总结:
1.Math.random方法明确范围[0,1)
2.Random类无参构造时,无参调用方法生成随机数都为该类型数的范围,但如double为0.0~1.0之间但不清楚边界包含情况,慎用
3.Random类有参构造时,若参数固定,不管有参还是无参调用方法得到的数都相同如

			Random rd2 = new Random(10);double numDouble4 = rd2.nextDouble();//循环多少次都固定产生0.7304302967434272int numInt6 = rd2.nextInt(5);//固定产生3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/105113.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业级CI/CD 持续集成/交付/发布

jenkins 安装与使用 nmcli g hostname jenkins 加载缓存 yum makecache fast 上传jdk11、jdk8 获取、上传war包 1、jenkins.io/download 2.4.27 2、老师发的 上传 maven 上传tomcat软件包 &#xff08;apache.org-tomcat8-下载&#xff09; 注意8009端口 /usr... vi /etc/pro…

react中ant.design框架配置动态路由

目录 什么是动态路由&#xff1f; 应用场景&#xff1a; ant.design动态路由如何配置&#xff1a; 首先&#xff1a;找到app.tsx文件 然后&#xff1a;找到menuHeaderRender 其次&#xff1a;修改menuHeaderRender为menuDataRender​编辑 最后&#xff1a;在箭头函数里re…

linux内存、cpu、进程、端口、硬盘管理

这里讲解一下linux内存、cpu、进程、端口、硬盘管理命令操作,更多linux常用命令见:一些经常使用的linux命令 一、内存、cup 管理 top 命令 1、top 命令的第一行 top - 10:11:23 up 12:10, 2 users, load average: 0.00, 0.02, 0.05 依次对应&#xff1a; 系统当前时间 10:11:…

Vite与Webpack谁更胜一筹,谁将引领下一代前端工具的发展

你知道Vite和Webpack吗&#xff1f;也许有不少“程序猿”对它们十分熟悉。 Webpack Webpack是一个JavaScript应用程序的静态模块打包工具&#xff0c;它会对整个应用程序进行依赖关系图构建。而这也会导致一个不可避免的情况&#xff0c;使用Webpack启动应用程序的服务器&…

C++指针解读(5)-- 指针和数组(多维数组)

相比一维数组&#xff0c;二维数组的概念和相关运算要复杂得多。 1、二维数组的存储及访问 假设有这么一个二维数组&#xff1a; int arr[3][4] {{ 10, 11, 12, 13 },{ 20, 21, 22, 23 },{ 30, 31, 32, 33 } }; 我们可以把二维数组看成数组的数组&#xff1a; &#xff…

136.只出现一次的数字

136. 只出现一次的数字 - 力扣&#xff08;LeetCode&#xff09; 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且…

Arduino驱动BNO055 10轴绝对定向传感器(惯性测量传感器篇)

目录 1、传感器特性 2、控制器和传感器连线图 3、驱动程序 BNO055是实现智能9轴绝对定向的新型传感器IC,它将整个传感器系统级封装在一起,集成了三轴14位加速度计,三轴16位陀螺仪,三轴地磁传感器和一个自带算法处理的32位微控制器。

在 Elasticsearch 中实现自动完成功能 3:completion suggester

在这篇博文中&#xff0c;我们将讨论 complete suggester - 一种针对自动完成功能进行优化的 suggester&#xff0c;并且被认为比我们迄今为止讨论的方法更快。 Completion suggester 使用称为有限状态转换器的数据结构&#xff0c;该结构类似于 Trie 数据结构&#xff0c;并且…

Net6 用imagesharp 实现跨平台图片处理并存入oss

项目要求&#xff1a;生成电子证书 一、模板文件在OSS中&#xff0c;直接加载 二、向模板文件添加二维码 三、向模板文件添加多行文字 四、生成二维码&#xff0c;存入本地&#xff0c; 五、向模板文件添加二维码 代码实现步骤 一、建立.net 6 API项目&#xff0c;安装N…

启航kp OpenHarmony环境搭建

前提 启航kp OpenHarmony环境搭建 搭建好OpenHarmony环境 未搭建好可以参考OpenHarmony docker环境搭建 安装vscode 下载好启航kp所需的开发包和样例 下载地址 搭建过程 进入正确文件夹 首先要进入 /home/openharmony 目录下&#xff0c;如果没有打开在vsc左上角找到文…

JUC并发编程——JUC并发编程概述及Lock锁(重点)(基于狂神说的学习笔记)

基于bilibili狂神说JUC并发编程视频所做笔记 概述 什么是JUC JUC时java.util工具包中的三个包的简称 java.util.concurrent java.util.concurrent.atomic java.util.concurrent.locks 业务&#xff1a;普通的线程代码中&#xff0c;我们常使用Runnable接口 但Runnable没有返…

百度开放平台第三方代小程序开发,授权事件、消息与事件通知总结

大家好&#xff0c;我是小悟 关于百度开放平台第三方代小程序开发的两个事件接收推送通知&#xff0c;是开放平台代小程序实现业务的重要功能。 授权事件推送和消息与事件推送类型都以event的值判断。 授权事件推送通知 授权事件推送包括&#xff1a;推送票据、授权成功、取…

便携式电加热器上亚马逊加拿大站CSA C22标准如何办理?

便携式电加热器 便携式电加热器是一种由电源供电的可移动设备&#xff0c;旨在为一块小面积区域供热。 便携式电加热器示例 我们的便携式电加热器政策 亚马逊要求所有便携式电加热器均经过检测&#xff0c;并且符合下列特定法规或标准要求&#xff1a; 商品 法规/标准要求 …

深入理解 python 虚拟机:GIL 源码分析——天使还是魔鬼?

深入理解 python 虚拟机&#xff1a;GIL 源码分析——天使还是魔鬼&#xff1f; 在目前的 CPython 当中一直有一个臭名昭著的问题就是 GIL (Global Interpreter Lock )&#xff0c;就是全局解释器锁&#xff0c;他限制了 Python 在多核架构当中的性能&#xff0c;在本篇文章当…

Java SPI(Service Provider Interface)

Java SPI是Java标准库提供的一种服务发现机制&#xff0c;它通过在classpath下约定的META-INF/services目录中&#xff0c;定义接口和其实现类之间的对应关系&#xff0c;从而动态加载目标接口的实现类。 通过一个实际例子来具体看一下 1、定义接口 public interface Animal …

【使用教程】在Ubuntu下PMM60系列一体化伺服电机通过SDO跑循环同步位置模式详解

本教程将指导您在Ubuntu操作系统下使用SDO&#xff08;Service Data Object&#xff09;来配置和控制PMM60系列一体化伺服电机以实现循环同步位置模式。我们将介绍必要的步骤和命令&#xff0c;以确保您能够成功地配置和控制PMM系列一体化伺服电机。 01.准备工作 在正式介绍之…

一种更具破坏力的DDoS放大攻击新模式

近日&#xff0c;内容分发网络&#xff08;CDN&#xff09;运营商Akamai表示&#xff0c;一种使网站快速瘫痪的DDoS放大攻击新方法正在被不法分子所利用。这种方法是通过控制数量巨大的中间设备&#xff08;middlebox&#xff0c;主要是指配置不当的服务器&#xff09;&#xf…

【VR】【Unity】白马VR课堂系列-VR开发核心基础03-项目准备-VR项目设置

【内容】 详细说明 在设置Camera Rig前,我们需要针对VR游戏做一些特别的Project设置。 点击Edit菜单,Project Settings,选中最下方的XR Plugin Management,在右边面板点击Install。 安装完成后,我们需要选中相应安卓平台下的Pico VR套件,关于怎么安装PICO VR插件,请参…

PyCharm运行Nosetests并导出测试报告

1. Pycharm运行Nosetests PyCharm可以使用两种方法&#xff0c;运行Nosetests测试文件&#xff1a; 1) 图形用户界面GUI a) 在PyCharm中&#xff0c;选中测试文件&#xff0c;如Tests/test_demo.py b) 鼠标右键选择Run Nosetests in test_demo.py即可执行测试 注1&#xff…

Python 自定义模块和包设计英语生词本(文件版)

上一篇&#xff1a;Python 自定义包和模块随机生成6位验证码&#xff08;详解版&#xff09;-CSDN博客 紧接上一篇博文&#xff0c;当我们熟练掌握如何自定义模块和包后&#xff0c;就要开始着手运用模块和包设计自己的小程序。这里我以“英语生词本”为例&#xff0c;来看我如…