当前位置: 首页 > news >正文

java中Math.random()和random()方法区别

在 Java 中生成随机数的核心工具是 java.lang.Math 类的 random() 方法和 java.util.Random 类,两者的底层公式和用法如下:

一、Math.random() 生成随机数(最常用)

Math.random() 是静态方法,直接返回 [0.0, 1.0) 区间的随机双精度小数(double 类型)。通过公式转换,可以生成任意范围的随机数。

通用公式(生成 [min, max) 区间的随机数):
// 生成 [min, max) 之间的随机整数(左闭右开)
int num = (int) (Math.random() * (max - min) + min);
  • 参数说明
    • max - min:确定随机数的范围大小(差值)。
    • Math.random() * (max - min):生成 [0.0, max - min) 区间的小数。
    • + min:将范围偏移到 [min, max)
    • (int):强制转换为整数(截断小数部分,实现整数随机数)。
常见场景示例:
  1. 生成 [0, 10) 之间的整数(0~9):

    int num = (int) (Math.random() * 10);
    
  2. 生成 [1, 100] 之间的整数(1~100,包含两端):

    int num = (int) (Math.random() * 100 + 1); // 等价于 [1, 101) → 1~100
    
  3. 生成 [5, 15] 之间的整数(5~15):

    int num = (int) (Math.random() * 11 + 5); // 15-5+1=11,范围 [5, 16) → 5~15
    

二、Random 类生成随机数(更灵活)

java.util.Random 类提供了更多方法(如生成整数、长整数、浮点数等),且支持指定种子(seed),适合需要可重复随机序列的场景。

基本用法:
import java.util.Random;Random random = new Random(); // 创建实例(无参构造:默认以系统时间为种子)
通用公式(生成 [min, max) 区间的随机数):
// 生成 [min, max) 之间的随机整数
int num = random.nextInt(max - min) + min;
  • 说明
    • random.nextInt(n) 直接返回 [0, n) 区间的整数(无需强制转换)。
    • 其他步骤与 Math.random() 逻辑一致,通过偏移实现范围调整。
常见场景示例:
  1. 生成 [0, 10) 之间的整数(0~9):

    int num = random.nextInt(10);
    
  2. 生成 [1, 100] 之间的整数(1~100):

    int num = random.nextInt(100) + 1; // [0,100) +1 → [1,101) → 1~100
    
  3. 生成 [-5, 5] 之间的整数(-5~5):

    int num = random.nextInt(11) - 5; // [0,11) -5 → [-5,6) → -5~5
    

三、两种方式的区别

特性Math.random()Random 类
返回类型仅返回 double([0.0, 1.0)提供 nextInt()nextLong() 等多种方法
种子控制无法指定种子(内部依赖 Random可通过构造方法指定种子(new Random(seed)),种子相同则随机序列相同
性能单次调用略慢(需转换)多次调用更高效(直接生成整数)
适用场景简单随机数生成(如单次取值)复杂场景(如大量随机数、可重复序列)

总结

  • 简单场景优先用 Math.random(),公式:(int)(Math.random() * 范围 + 最小值)
  • 复杂场景(多类型、种子控制)用 Random 类,公式:random.nextInt(范围) + 最小值
  • 范围计算核心:范围 = max - min(左闭右开区间),若需包含 max,则范围 = max - min + 1
http://www.dtcms.com/a/445673.html

相关文章:

  • Django SimpleUI 详解:现代化的Django Admin界面美化方案
  • 网站开发客户流程 6个阶段简述常用的网站开发软件
  • 区块链分层学:新的开始
  • Qt与CMakeLists.txt
  • Ubuntu20.04安装Anaconda3-2025.06
  • VirtualBox中ubuntu1804虚拟机共享文件夹设置
  • 基于单片机的环境监测智能报警系统的设计(论文+源码)
  • 成都网页制作推广合肥网站seo报价
  • 短波红外相机在工业视觉检测中的应用
  • 马鞍山市建设银行网站科右前旗建设局网站
  • 【傻呱呱】托管项目到GitHub(纯前端UI操作)
  • 神经网络之激活函数Softmax
  • 高端网站建设哪家公司好网站建设招标样本
  • Qt Quick 3D-机械臂模型显示与交互
  • 轻松Linux-10.进程信号
  • 淘宝网站可信度状况及建设策略桂林网站
  • HTML简单入门—— 基础标签与路径解析
  • AI Agent:从“超级玩具“到“核心生产力“,智能新纪元的深度解析
  • 网站开发和运行 法律html5登录界面完整代码
  • 数据预处理与可视化流水线:Pandas Profiling + Altair 实战指南
  • 全栈开发杂谈————关于websocket若干问题的大讨论
  • Headless Service
  • Robotframework7.0与 6.0 的差异
  • dmfldr快速装载工具使用
  • 网站建设技术思维导图wordpress页面结构
  • 兰亭妙微QT软件开发与UI设计协同:如何避免设计与实现脱节?
  • Qt3D--箭头示例
  • 自助建子站龙口网络
  • 【QT常用技术讲解】opencv实现指定分辨率打开摄像头
  • ICT 数字测试原理 7 - -VCL 测试环境