Java 随机数生成:从青铜到王者的骚操作指南

Java 随机数生成:从青铜到王者的骚操作指南 🎲✨

听说同事还在用抛硬币生成随机数?🤯 今天咱就把 Java 随机数整得明明白白,保证你写完代码同事直呼"666"!

壹:底层小弟 - Math.random() 🧙‍♂️

基础操作(幼儿园级别)

java 复制代码
System.out.print("请输入最小值min: ");
int min = scanner.nextInt();  // 别输错哦,不然程序原地爆炸💥
System.out.print("请输入最大值max: ");
int max = scanner.nextInt();

// 核心魔法在此 ✨
int randomNum = (int)(Math.random() * (max - min + 1)) + min;
System.out.println("生成的随机数: " + randomNum);

为什么加 1?(灵魂拷问 ❓)

情况 算式 结果范围 包含最大值?
✘ 不加 1 (int)(Math.random()* 3) + 2 {2,3,4} ❌ 永远得不到 5
✅ 加 1 (int)(Math.random()* 4) + 2 {2,3,4,5} ✔️

举个栗子 🌰:

贰:进阶大佬 - Random 类 🦸‍♂️

装 X 必备单例模式

java 复制代码
Random rand = new Random();  // 从此告别Math.random!
int randomNum = rand.nextInt(max - min + 1) + min;

Random VS Math.random

特性 Random 类 Math.random
线程安全 ❌ 单挑王 ❌ 脆皮鸡
使用便利度 ✅ 🤏 需要运算
专业度 ⭐⭐⭐⭐ ⭐⭐
自定义种子 ✔️ 可控命运 ❌ 听天由命

叁:王者专属 - ThreadLocalRandom 🏆

多线程杀手锏

java 复制代码
// 高端玩家直接抄作业(高并发场景必备):
int randomNum = ThreadLocalRandom.current()
                        .nextInt(min, max + 1); // 注意max要+1!

💡 真相:多线程用普通 Random 比蜗牛还慢 🐌,ThreadLocalRandom 才是真香!

肆:安全专家 - SecureRandom 🔐

java 复制代码
// 银行级安全防护
SecureRandom sr = new SecureRandom(); // 安全到亲妈都不认识
int randomNum = sr.nextInt(max - min + 1) + min;

四大神器对比表

类名 适用场景 性能 线程安全 代码骚度
Math.random() 新手村任务 ⭐⭐ ❌ 🐣
Random 单人副本 ⭐⭐⭐ ❌ 🦸‍♂️
ThreadLocalRandom 百人团战 ⭐⭐⭐⭐ ✅ 🚀
SecureRandom 银行金库 ⭐⭐ ✅ 🔐

终极避坑指南 🚫🐛

  1. 范围陷阱 :永远记得 max-min+1,别让最大值变路人!
java 复制代码
   // 错误示范:永远得不到max值!
   int num = rand.nextInt(max - min) + min;  ❌
   // 正确姿势:+1是灵魂!
   int num = rand.nextInt(max - min + 1) + min; ✅
  1. 多线程警告 :团队作战必用 ThreadLocalRandom,否则队友变敌军 🤺

用普通Random处理多线程 ≈ 早高峰挤地铁🚇 → 轻则卡顿重则崩

  1. 安全警告 :验证码用 SecureRandom,不然分分钟被爆破 💣

用普通Random处理验证码 ≈ 被人 hack 后 10 分钟 → 100 次失败尝试

  1. 种子玄学 :setSeed()要谨慎,乱设种子可能出规律值(别问我是怎么知道的 😭)

📢 重要通知:写完记得测试边界值!min=0 max=0 时程序不崩溃才叫专业 👨‍💻


下次产品经理说「加个随机功能」,请把这篇文章甩他脸上并说:

大人,时代变了! 💥

相关推荐
ServBay7 分钟前
Claude Fable 5.5 测试曝光,但它在悄悄给你打分
后端·ai编程·claude
IT规划师1 小时前
一文讲透五种发布机制:滚动、蓝绿、金丝雀、红黑与 AB
后端·面试
一条Go2 小时前
两套权限目录,三重闸门:Alioth 的多租户 RBAC 为什么这么拧
后端·程序员·github
报表开不开发2 小时前
从"给人看的 Excel"到"能入库的规范行":点检表数据清洗逻辑拆解
程序员
Tokenfree3 小时前
把多模态 OCR 接进业务系统:四千张运单,三个坑
后端
用户859313061353 小时前
我给 AI Agent 写了个下载器:293KB 的网页,不再吃掉 7 万 token
后端
phil63 小时前
沙箱核心功能系列 06:编排调度与资源管理
后端
小兔子3 小时前
if (system(cmd) != 0) 判不出命令失败:它返回的是等待状态,不是退出码
后端
艾迪的技术之路3 小时前
16k 条慢查询,128 张分表,我这么解决
后端·github
dpharness3 小时前
我踩过的四个记忆坑,从预算到换机
前端·后端