在 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生成随机整数相关推荐

  1. 用Java实现在【520,1314】之间生成随机整数的故事

    做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 在未来城市工作的的程序员小木,做了一个梦,梦到自己在塔鲁姆的街道上看到一个姑娘,这个姑娘从远处走向他,脸上带着微笑.让小木 ...

  2. java生成随机10位数字_用Java生成10个随机的四位数字

    要生成随机整数,请将Random类与nextInt一起使用.首先,创建一个Random对象-Random rand = new Random(); 上面的Random是一个随机数生成器.现在,一一挑选 ...

  3. Java生成随机数字和字母组合10位数

    /**               * java生成随机数字和字母组合10位数               * @param length[生成随机数的长度]               * @ret ...

  4. C++生成随机整数和随机种子

    C++生成随机整数和随机种子 #include <iostream> #include <ctime> using namespace std; int main() {//系 ...

  5. Java生成随机邀请码

    Java生成随机10位不重复邀请码 public static void main(String[] args) {for (int i = 0; i < 10; i++) {System.ou ...

  6. python中生成随机整数,随机小数,0-1之间的小数

    python中生成随机整数,随机小数,0-1之间的小数 1.生成随机整数 import randomprint(random.randint(1,100))#生成1到100之间的随机整数 2.生成0- ...

  7. Java 生成随机昵称(形容词加名词)

    Java 生成随机昵称 今天写了个使用java生成随机可爱昵称的代码,就是使用形容词拼接名词. package com.haier.util;import java.util.Random;publi ...

  8. java生成随机时间_Java生成某段时间内的随机时间

    上代码: import java.text.SimpleDateFormat; import java.util.Date; public class DateUtil { /** * 生成随机时间 ...

  9. java生成随机数组_JAVA生成随机数组10个数字并求和

    JAVA生成随机数组10个数字并求和 本文最终结果大概是这样的',使用java技术随机生成10个数,然后填充一个数组并在消息框中显示数组内容,接着对数组求和输出,将结果显示在消息框中. 设计思路:可以 ...

  10. Java 生成随机订单号

    Java 生成随机订单号 /** 根据时间生成随机订单号 */ public class GenerateNum { // 全局自增数 private static int count = 0; // ...

最新文章

  1. 高端华为笔记本敲代码就是爽!!包邮送!
  2. 想知道spring boot+cloud+docker的微服务体系架构如何使用吗?
  3. ajax 输入不为空,ajax POST响应为空
  4. mPaaS-RPC 拦截器各种场景下的使用指南
  5. xtrabackup备份脚本
  6. js获取表单文本框中的值
  7. memcache 获取key的方法,查询session存储
  8. js将数字转为千分位/清除千分位
  9. seata xid是什么_Spring Cloud Alibaba分布式事务解决框架Seata概念入门篇
  10. qtp11安装及入门
  11. Oracle数据库的下载地址
  12. 打开MSDTC的方法(图解)
  13. 指付通盗刷信用卡维权连载--9月4日维权纪实
  14. 【安全牛学习笔记】扫描工具-Nikto
  15. R语言:wilcox 无法精确计算带连结的p值
  16. 用微博帐号登录出错了! 对第三方应用进行授权时出现错误,请您联系第三方应用的开发者: 十五发芽或者稍后再试。 错误码:21322 重定向地址不匹配
  17. 执行python manage.py makemigrations出现如下错误解决方法
  18. windows编译-spidermonkey
  19. ffmpeg 合并视频
  20. 天线越大越好吗_天线数量是不是越多信号越好?无线路由器一、二、三根天线有什么区别?...

热门文章

  1. “双一流”高校,整体搬迁!
  2. 分子力学无法模拟化学键的断裂的原因
  3. Rewrite 做二级域名转向
  4. 京东价格监控软件开发技术探讨十五:通过酷Q和ZeroMQ实现推送变价变库消息到QQ群
  5. 流程型与离散型制造的区别【老外的分析】
  6. linux安装英伟达显卡驱动
  7. 计算机英语 单词1-100
  8. wd移动硬盘不能识别_wd移动硬盘无法识别
  9. Spring框架中的aop操作之一 及aspectjweaver.jar与aopalliance-1.0.jar下载地址 包含beans 注解context 和aop的约束
  10. 来自2022年的Python 网络爬虫补充知识,HTML+JSON+爬虫场景