【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
相关文章:
【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类是基于种…...
微软和OpenAI正在开发AI芯片, 并计划下个月发布
今年初,Chat**引起了无数网友关注,一度成为了热门话题。这是由人工智能研究实验室OpenAI开发的一款聊天机器人模型,也称为一种人工智能(AI)技术驱动的自然语言处理工具。能够通过学习和理解人类的语言来进行对话&#…...
记一次Hbase2.1.x历史数据数据迁移方案
查看待迁移的表 list_namespace_tables vaas_dwm2. 制作待迁移表“DWM_TRIP_PART”的快照 snapshot vaas_dwm:DWM_TRIP_PART,dwm_trip_part_snapshot3. 统计待迁移表数据总数 hbase org.apache.hadoop.hbase.mapreduce.RowCounter vaas_dwm:DWM_TRIP_PART...
luajit简介
LuaJIT是一种高效的Lua解释器,其通过即时编译技术将Lua代码转换为机器代码,从而提供了非常快速的执行速度。在本文中,我们将介绍LuaJIT的原理、使用方法以及在嵌入式Linux系统中的应用示例。 LuaJIT的原理 LuaJIT基于Lua 5.1实现࿰…...
1.2 switch实现两个数的四则运算
注意: 1、每一个case后面要有break 2、/运算的时候注意分母不能为0 int a, b;char c;cin>>a>>b>>c;switch (c){case :cout << a << << b << << a b << endl;break;case -:cout << a << - …...
mysql面试题47:MySQL中Innodb的事务实现原理
该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Innodb的事务实现原理 InnoDB是MySQL中一种常用的存储引擎,它支持事务和行级锁等特性。以下是InnoDB事务实现的简要原理: 事务定义: 事务是指一…...
Google云平台构建数据ETL任务的最佳实践
在数据处理中,我们经常需要构建ETL的任务,对数据进行加载,转换处理后再写入到数据存储中。Google的云平台提供了多种方案来构建ETL任务,我也研究了一下这些方案,比较方案之间的优缺点,从而找到一个最适合我…...
【更新】囚生CYの备忘录(202331014~)
文章目录 20221014 20221014 本以为下午怡宝的比赛至少是能跑到前三,结果连前五都没混到,赛前都知道路线不可能有5km,因为即便是绕着主校区最外沿跑一圈也才4km出头,我估摸着大概是2500米,结果实际上只有1700米&#x…...
《UnityShader入门精要》学习4
一个最简单的顶点/片元着色器 一个最简单的顶点/片元着色器 Unity Shader的基本结构。它包含了Shader、Properties、SubShader、Fallback等语义块。顶点/片元着色器的结构与之大体类似 Shader "MyShaderName" {Properties {// 属性}SubShader {// 针对显卡A的S…...
kaggle新赛:写作质量预测大赛【数据挖掘】
赛题名称:Linking Writing Processes to Writing Quality 赛题链接:https://www.kaggle.com/competitions/linking-writing-processes-to-writing-quality 赛题背景 写作过程中存在复杂的行为动作和认知活动,不同作者可能采用不同的计划修…...
导入导出Excel
Springboot Easyexcel导入导出excel EasyExcel 的导出导入支持两种方式进行处理*easyexcel 导出不用监听器,导入需要写监听器* 一、导入:简单实现1. 导入依赖,阿里的easyexcel插件2. 程序2-1. 实体类:2-2. 定义一个 监听类&#…...
C# Thread.Sleep(0)有什么用?
一、理论分析 回答这个要先从线程时间精度(时间片)开始说起。很多参考书说,默认情况下,时间片为15ms 左右,但是这是已经过时的知识。在老的 Windows 操作系统里,应用程序模式时时间片 15ms 左右࿰…...
二十四、【参考素描三大面和五大调】
文章目录 三种色面(黑白灰)五种色调 这个可以参考素描对物体受光的理解:素描调子的基本规律与素描三大面五大调物体的明暗规律 三种色面(黑白灰) 如下图所示,我们可以看到光源是从亮面所对应的方向射过来的,所以我们去分析图形的时候,首先要…...
【Python 千题 —— 基础篇】进制转换:十进制转二进制
题目描述 题目描述 计算机底层原理中常使用二进制来表示相关机器码,学会将十进制数转换成二进制数是一个非常重要的技能。现在编写一个程序,输入一个十进制数,将其转换成二进制数。 输入描述 输入一个十进制数。 输出描述 程序将输入的…...
[ spring boot入门 ] java: 错误: 无效的源发行版:17
因为我目前idea中使用的是jdK8,而在pom.xml文件里是17,所以我需要将所有地方修改为jdk8 pom.xml的jdk版本为8 maven的setting.xml文件 jdk为8 还有Java Compiler 还有Project Structure 里面的project 和 module...
【计算机组成体系结构】电路基本原理与加法器设计
一、算术逻辑单元—ALU 1.基本的逻辑运算(1bit的运算) 基本逻辑运算分为,与、或、非。大家应该很熟悉了,与:全1为1,否则为0。或:全0为0,否则为1。非:取反。三个基本的逻…...
MyBatisPlus之基本CRUD、常用注解
文章目录 前言一、MyBatisPlus简介1.简介2.特性 二、基本CRUD1.依赖2.搭建基本结构3.BaseMapper4.使用插入删除(1)通过id删除记录(2)通过id批量删除记录(3)通过map条件删除记录 修改查询(1&…...
采集EtherNET/IP转Profinet在西门子plc中的应用
远创智控网关YC-EIPM-PN,让你的设备和云平台实时连接! 远创智控YC-EIPM-PN网关产品支持各种数据接口,无论是工业领域的仪表、PLC、计量设备,还是设备数据,都能实时采集并整合。它将这些设备中的运行数据、状态数据等信…...
Paddle build_cinn_pass_test源码阅读(fluid目录下)
代码位置在 paddle\fluid\framework\paddle2cinn\build_cinn_pass_test.cc ,因为paddle CINN和PIR部分依旧在高频更新,所以各位看到的可能和我的不一样 inline bool CheckNodeExisted(const std::unordered_set<Node*>& nodes,const std::str…...
函数调用:为什么会发生stack overflow?
在开发软件的过程中我们经常会遇到错误,如果你用 Google 搜过出错信息,那你多少应该都访问过Stack Overflow这个网站。作为全球最大的程序员问答网站,Stack Overflow 的名字来自于一个常见的报错,就是栈溢出(stack ove…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
