【JAVA】产生随机数:rand.nextInt(int n )
参考链接:
- CSDN: rand.nextint()
- CSDN: jave中的Random中rand.nextInt(int n )的取值范围
- CSDN: random.nextInt()与Math.random()基础用法
1. 代码示例
- `Random rand = new Random();` - `p += rand.nextInt(2); //取0-2(左闭右开不包括2)的整数`
2. rand.nextInt()的用法
-
背景:
- 自从JDK最初版本发布起,我们就可以使用java.util.Random类产生随机数了。
- 在JDK1.2中,Random类有了一个名为nextInt()的方法:
public int nextInt(int n)
-
给定一个参数n,nextInt(n)将返回一个大于等于0小于n的随机数,即:0 <= nextInt(n) < n。
-
源码:
/** * Returns a pseudo-random uniformly distributed {@code int} * in the half-open range [0, n). */ public int nextInt(int n) { if (n <= 0) { throw new IllegalArgumentException("n <= 0: " + n); } if ((n & -n) == n) { return (int) ((n * (long) next(31)) >> 31); } int bits, val; do { bits = next(31); val = bits % n; } while (bits - val + (n - 1) < 0); return val; }
3. rand.nextInt随机数取值范围
-
左闭右闭 [a,b]:
rand.nextInt(b-a+1)+a
-
左闭右开 [a,b):
rand.nextInt(b-a)+a
-
示例:
- 要求在10到300中产生随机数[10,300]包含10和300:
int randNum = rand.nextInt(300-10+1) + 10;
- rand.nextInt(300-10+1)=rand.nextInt(291)意思是产生[0,291)不包括291再加10就是[10,301)不包括301,如果要包括300所以要 rand.nextInt(300-10+1)里面要加1.
- 如果是[10,300)不包括300就是 rand.nextInt(300-10)+10,不要加1.
- 要求在10到300中产生随机数[10,300]包含10和300:
4. random.nextInt()与Math.random()基础用法
-
1、来源
- random.nextInt() 为 java.util.Random类中的方法;
- Math.random() 为 java.lang.Math 类中的静态方法。
-
2、用法
- 产生0-n的伪随机数(伪随机数参看最后注解):
- // 两种生成对象方式:带种子和不带种子(两种方式的区别见注解)
-
Random random = new Random();
-
Integer res = random.nextInt(n);
-
Integer res = (int)(Math.random() * n);
-
-
3、总结
- Math.random() 方法生成[0, 1)范围内的double类型随机数;Random类中的nextXxxx系列方法生成0-n的随机数;
- Math.random() 线程安全,多线程环境能被调用;
- 如无特殊需求,则使用(int)(Math.random()*n)的方式生成随机数即可。
-
4、注:何谓伪随机数
- 伪随机既有规则的随机,Random类中的随机算法就是伪随机。
- 具体表现为:相同种子数的Random对象生成的随机数序列相同:
END
分类:
语言Java|py|c
标签:
java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!