Java生成随机整数
在 Java 中,生成随机数的场景有很多,所以本文我们就来盘点一下 几种生成随机数的方式,以及它们之间的区别和每种生成方式所对应的场景。
1. java.util.Random
这Random().nextInt(int bound)会生成一个从 0(包括)到 bound(不包括)的随机整数。
(1)代码片段
对于getRandomNumberInRange(5, 10),这将生成一个介于 5(含)和 10(含)之间的随机整数。
private static int getRandomNumberInRange(int min, int max) {if (min >= max) {throw new IllegalArgumentException("max must be greater than min");}Random r = new Random();return r.nextInt((max - min) + 1) + min;}
(2)什么是 (max – min) + 1) + min?
上面的公式将生成一个介于 min(含)和 max(含)之间的随机整数。
//Random().nextInt(int bound) = Random integer from 0 (inclusive) to bound (exclusive) //1. nextInt(range) = nextInt(max - min)new Random().nextInt(5); // [0...4] [min = 0, max = 4]new Random().nextInt(6); // [0...5]new Random().nextInt(7); // [0...6]new Random().nextInt(8); // [0...7]new Random().nextInt(9); // [0...8]new Random().nextInt(10); // [0...9] new Random().nextInt(11); // [0...10] //2. To include the last value (max value) = (range + 1)new Random().nextInt(5 + 1) // [0...5] [min = 0, max = 5]new Random().nextInt(6 + 1) // [0...6]new Random().nextInt(7 + 1) // [0...7]new Random().nextInt(8 + 1) // [0...8]new Random().nextInt(9 + 1) // [0...9]new Random().nextInt(10 + 1) // [0...10] new Random().nextInt(11 + 1) // [0...11] //3. To define a start value (min value) in a range,// For example, the range should start from 10 = (range + 1) + minnew Random().nextInt(5 + 1) + 10 // [0...5] + 10 = [10...15]new Random().nextInt(6 + 1) + 10 // [0...6] + 10 = [10...16]new Random().nextInt(7 + 1) + 10 // [0...7] + 10 = [10...17]new Random().nextInt(8 + 1) + 10 // [0...8] + 10 = [10...18]new Random().nextInt(9 + 1) + 10 // [0...9] + 10 = [10...19]new Random().nextInt(10 + 1) + 10 // [0...10] + 10 = [10...20]new Random().nextInt(11 + 1) + 10 // [0...11] + 10 = [10...21] // Range = (max - min)// So, the final formula is ((max - min) + 1) + min //4. Test [10...30]// min = 10 , max = 30, range = (max - min)new Random().nextInt((max - min) + 1) + minnew Random().nextInt((30 - 10) + 1) + 10new Random().nextInt((20) + 1) + 10new Random().nextInt(21) + 10 //[0...20] + 10 = [10...30] //5. Test [15...99]// min = 15 , max = 99, range = (max - min)new Random().nextInt((max - min) + 1) + minnew Random().nextInt((99 - 15) + 1) + 15new Random().nextInt((84) + 1) + 15new Random().nextInt(85) + 15 //[0...84] + 15 = [15...99] //Done, understand?
(3)生成 10 个随机整数的完整示例,范围在 5(含)和 10(含)之间。
package com.mkyong.example.test;
import java.util.Random;
public class TestRandom {public static void main(String[] args) {for (int i = 0; i < 10; i++) {System.out.println(getRandomNumberInRange(5, 10));}}private static int getRandomNumberInRange(int min, int max) {if (min >= max) {throw new IllegalArgumentException("max must be greater than min");}Random r = new Random();return r.nextInt((max - min) + 1) + min;}
}
输出
7
6
10
8
9
5
7
10
8
5
2. 数学.随机
这Math.random()给出了一个从 0.0(包括)到 1.0(不包括)的随机双精度值。
(1)代码片段。参考1.2,或多或少是相同的公式。
(int)(Math.random() * ((max - min) + 1)) + min
(2)生成16(含)到20(含)范围内的10个随机整数的完整示例。
package com.mkyong.example.test;
public class TestRandom {public static void main(String[] args) {for (int i = 0; i < 10; i++) {System.out.println(getRandomNumberInRange(16, 20));}}private static int getRandomNumberInRange(int min, int max) {if (min >= max) {throw new IllegalArgumentException("max must be greater than min");}return (int)(Math.random() * ((max - min) + 1)) + min;}
}
输出
17
16
20
19
20
20
20
17
20
16
3.Java 8 Random.ints
在 Java 8 中,添加了新方法java.util.Random
public IntStream ints(int randomNumberOrigin, int randomNumberBound)public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound)
这Random.ints(int origin, int bound)或Random.ints(int min, int max)生成一个从原点(包括)到绑定(不包括)的随机整数。
(1)代码片段。
private static int getRandomNumberInRange(int min, int max) { Random r = new Random();return r.ints(min, (max + 1)).findFirst().getAsInt();}
(2)生成 33(含)到 38(含)范围内的 10 个随机整数的完整示例。
package com.mkyong.form.test;
import java.util.Random;
public class TestRandom {public static void main(String[] args) {for (int i = 0; i < 10; i++) {System.out.println(getRandomNumberInRange(33, 38));}}private static int getRandomNumberInRange(int min, int max) { Random r = new Random();return r.ints(min, (max + 1)).limit(1).findFirst().getAsInt(); }
}
输出
34
35
37
33
38
37
34
35
36
37
(3)额外,供自己参考。
生成范围在 33(含)和 38(不含)之间的随机整数,流大小为 10。并打印出带有forEach.
//Java 8 onlynew Random().ints(10, 33, 38).forEach(System.out::println);
输出
34
37
37
34
34
35
36
33
37
34
Java学习视频
Java基础:
Java300集,Java必备优质视频_手把手图解学习Java,让学习成为一种享受
Java项目:
【Java游戏项目】1小时教你用Java语言做经典扫雷游戏_手把手教你开发游戏
【Java毕业设计】OA办公系统项目实战_OA员工管理系统项目_java开发
Java生成随机整数相关推荐
- 用Java实现在【520,1314】之间生成随机整数的故事
做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 在未来城市工作的的程序员小木,做了一个梦,梦到自己在塔鲁姆的街道上看到一个姑娘,这个姑娘从远处走向他,脸上带着微笑.让小木 ...
- java生成随机10位数字_用Java生成10个随机的四位数字
要生成随机整数,请将Random类与nextInt一起使用.首先,创建一个Random对象-Random rand = new Random(); 上面的Random是一个随机数生成器.现在,一一挑选 ...
- Java生成随机数字和字母组合10位数
/** * java生成随机数字和字母组合10位数 * @param length[生成随机数的长度] * @ret ...
- C++生成随机整数和随机种子
C++生成随机整数和随机种子 #include <iostream> #include <ctime> using namespace std; int main() {//系 ...
- Java生成随机邀请码
Java生成随机10位不重复邀请码 public static void main(String[] args) {for (int i = 0; i < 10; i++) {System.ou ...
- python中生成随机整数,随机小数,0-1之间的小数
python中生成随机整数,随机小数,0-1之间的小数 1.生成随机整数 import randomprint(random.randint(1,100))#生成1到100之间的随机整数 2.生成0- ...
- Java 生成随机昵称(形容词加名词)
Java 生成随机昵称 今天写了个使用java生成随机可爱昵称的代码,就是使用形容词拼接名词. package com.haier.util;import java.util.Random;publi ...
- java生成随机时间_Java生成某段时间内的随机时间
上代码: import java.text.SimpleDateFormat; import java.util.Date; public class DateUtil { /** * 生成随机时间 ...
- java生成随机数组_JAVA生成随机数组10个数字并求和
JAVA生成随机数组10个数字并求和 本文最终结果大概是这样的',使用java技术随机生成10个数,然后填充一个数组并在消息框中显示数组内容,接着对数组求和输出,将结果显示在消息框中. 设计思路:可以 ...
- Java 生成随机订单号
Java 生成随机订单号 /** 根据时间生成随机订单号 */ public class GenerateNum { // 全局自增数 private static int count = 0; // ...
最新文章
- 高端华为笔记本敲代码就是爽!!包邮送!
- 想知道spring boot+cloud+docker的微服务体系架构如何使用吗?
- ajax 输入不为空,ajax POST响应为空
- mPaaS-RPC 拦截器各种场景下的使用指南
- xtrabackup备份脚本
- js获取表单文本框中的值
- memcache 获取key的方法,查询session存储
- js将数字转为千分位/清除千分位
- seata xid是什么_Spring Cloud Alibaba分布式事务解决框架Seata概念入门篇
- qtp11安装及入门
- Oracle数据库的下载地址
- 打开MSDTC的方法(图解)
- 指付通盗刷信用卡维权连载--9月4日维权纪实
- 【安全牛学习笔记】扫描工具-Nikto
- R语言:wilcox 无法精确计算带连结的p值
- 用微博帐号登录出错了! 对第三方应用进行授权时出现错误,请您联系第三方应用的开发者: 十五发芽或者稍后再试。 错误码:21322 重定向地址不匹配
- 执行python manage.py makemigrations出现如下错误解决方法
- windows编译-spidermonkey
- ffmpeg 合并视频
- 天线越大越好吗_天线数量是不是越多信号越好?无线路由器一、二、三根天线有什么区别?...
热门文章
- “双一流”高校,整体搬迁!
- 分子力学无法模拟化学键的断裂的原因
- Rewrite 做二级域名转向
- 京东价格监控软件开发技术探讨十五:通过酷Q和ZeroMQ实现推送变价变库消息到QQ群
- 流程型与离散型制造的区别【老外的分析】
- linux安装英伟达显卡驱动
- 计算机英语 单词1-100
- wd移动硬盘不能识别_wd移动硬盘无法识别
- Spring框架中的aop操作之一 及aspectjweaver.jar与aopalliance-1.0.jar下载地址 包含beans 注解context 和aop的约束
- 来自2022年的Python 网络爬虫补充知识,HTML+JSON+爬虫场景