5.math类

常用的math方法

1)abs 绝对值

2)pow 求幂

3)ceil 向上取整 // -1.8 -> -1.0, 4.5->5.0 返回>=该参数的最小整数(返回值double)

4)floor 向下取整 //-1.8 -> -2.0, 4.5->4.0 返回<=该参数的最大整数(返回值double)

5)round 四舍五入

6)sqrt 求开方

7)random 求随机数//思考:请写出获取a.b之间的一个随机整数b均为整数?

8)max求两个数的最大值

9)min求两个数的最小值

math.random 和 Random类

Math.random() 和 java.util.Random 都是伪随机数工具,但用途和灵活性不同。

核心区别

对比项 Math.random() java.util.Random
返回类型 只能返回 double,范围 [0.0, 1.0) 可返回 int、long、double、boolean、float、Gaussian 等
使用方式 静态方法,直接调用 需要创建对象
底层实现 Java 中内部使用一个共享的 Random 实例 自己维护随机数生成器状态
可控性 不能设置种子 可以 new Random(seed),结果可复现
线程安全 底层共享 Random,线程安全但高并发有竞争 Random 方法线程安全,但多线程竞争下性能一般
适用场景 简单生成 [0,1) 小数 需要整数范围、种子、多种类型随机数
密码学安全 否 否

示例

  1. Math.random()
java 复制代码
double d = Math.random();          // [0.0, 1.0)
int n = (int)(Math.random() * 10); // 0~9

生成 [min, max) 的整数:

java 复制代码
int min = 5, max = 10;
int n = min + (int)(Math.random() * (max - min)); // 5~9
  1. Random
java 复制代码
import java.util.Random;

Random random = new Random();

int a = random.nextInt();        // 任意 int
int b = random.nextInt(10);      // 0~9
double c = random.nextDouble();  // [0.0, 1.0)
boolean flag = random.nextBoolean();

生成 [min, max):

java 复制代码
int min = 5, max = 10;
int n = random.nextInt(max - min) + min; // 5~9

设置种子,结果可复现:

java 复制代码
Random r1 = new Random(123);
Random r2 = new Random(123);

System.out.println(r1.nextInt(100));
System.out.println(r2.nextInt(100)); // 相同

选择建议

  • 只是要一个 [0,1) 小数 :用 Math.random() 最简单。
  • 需要整数范围、布尔值、种子、可复现结果 :用 Random。
  • 多线程高并发 :优先用 ThreadLocalRandom。
java 复制代码
import java.util.concurrent.ThreadLocalRandom;

int n = ThreadLocalRandom.current().nextInt(1, 100); // [1,100)
  • 安全相关,如验证码、令牌、密码盐 :不要用这两个,使用 SecureRandom。
java 复制代码
import java.security.SecureRandom;

SecureRandom secureRandom = new SecureRandom();
int n = secureRandom.nextInt(100);

总结

Math.random() 是"只能生成 [0,1) double 的便捷方法";Random 是"功能更完整、可控制种子的伪随机数类"。普通简单场景用 Math.random(),需要更多随机类型和范围控制时用 Random。

相关推荐
文丑颜不良啊41 分钟前
LeetCode76~100题目解析
java·leetcode
她的男孩44 分钟前
页面已发布用户仍进不去:Forge Admin 门户入口与系统菜单挂载解耦
java·spring boot·低代码
不像程序员的程序媛1 小时前
mybatisplus insert dto未指定id时会如何
java·开发语言
BeiGuTing_code1 小时前
C字符输出:一个换行符引发的“失踪案”
c语言·开发语言
我命由我123451 小时前
5-2.Python 编码进阶 - 字符串进阶(拼接、普通格式化、普通格式化数字精度控制、快速格式化、遍历、常用方法)
java·开发语言·后端·python·学习·java-ee·学习方法
http阿拉丁神猫5 小时前
Go语言入门笔记:从基础到开发环境搭建(二)
开发语言·笔记·golang
不会就选b6 小时前
C++补充部分(一)--lambda 表达式
开发语言·c++
Pniubi9 小时前
HashMap的扩容和树化边界
java·开发语言
Mikko79 小时前
用 Java 复刻了高中时在塞班上玩的「熔岩矿车」:纯 Swing、零依赖、没有一张图片,一个 jar 双击就能玩
java·游戏开发·swing