Java如何生成随机数?要不要了解一下!
前言
我们在学习 Java 基础时就知道可以生成随机数,可以为我们枯燥的学习增加那么一丢丢的乐趣。本文就来介绍 Java 随机数。
一、Random类介绍
在 Java 中使用 Random 工具类来生成随机数,该类在 java.util 包下,在 JDK1.0 版本就存在了。Random 单词本身就是随机、随意、任意的意思。Random 是一个普通类,所以在使用时需要创建 Random 对象,在调用其提供的方法。
public class Random implements java.io.Serializable {}
Random 类提供了诸多方法,如下图:

二、Random类生成随机数
1.生成随机数
在 Java 中,可以使用 java.util.Random 类来生成随机数。 Random 类提供了多个方法来生成不同种类的随机数,例如 nextInt()、nextDouble() 等。
我们这里演示如何生成一个介于0到9之间的随机整数:
import java.util.Random;
public class RandomTest {
public static void main(String[] args) {
// 创建Random实例
Random random = new Random();
// 生成0到9之间的随机数
int randomNum = random.nextInt(10);
System.out.println(randomNum);
}
}
在上面的示例代码中,首先创建了一个 Random 对象,然后使用 nextInt() 方法生成一个介于0到9之间的随机整数,并将结果打印到控制台上。
2.nextInt()方法
nextInt(int bound) 方法是 Random 类的一个实例方法,它用于生成一个介于0(包括0)和指定值(不包括该值)之间的随机整数。
我们之前使用 nextInt(int bound) 方法生成 0-9 之间的随机数:
Random random = new Random();
int randomNum = random.nextInt(10);
System.out.println(randomNum);
代码中使用 Random 类的默认构造函数创建一个随机数生成器对象,然后调用 nextInt(int bound) 方法生成介于 0(包括 0)和 10(不包括 10)之间的随机整数(多次提及且加粗),最后将结果存储到 randomNum 变量中并打印到控制台上。
这个方法的实现原理是根据随机数生成器的内部状态生成随机数。如果指定的 bound 参数是正数,则生成的随机数即为 0 到 bound 之间的某个整数。如果 bound 是负数或者 0,则会抛出 IllegalArgumentException 异常。需要注意的是,生成的随机数是伪随机数,其实际上是一个确定性的函数,但是它的表现看上去是随机的。
对于 Random.nextInt(int bound) 方法,需要特别注意 bound 参数的取值范围。如果生成的随机数不是 0 到 bound 之间,那么就可能会对一些应用产生负面影响,比如在密码学应用中可能会导致漏洞。因此,在使用该方法时,需要仔细检查 bound 参数的取值范围,并对其进行适当的限制。
那么除了 nextInt() 方法,还有 nextLong()、nextBoolean()、nextFloat()、nextDouble() 等。
三、使用场景
Java 随机数生成器可以在很多场景下使用,比如在游戏开发中,可以随机生成怪物、地图、道具等;如果涉及密码,可以在加密过程中需要生成随机数,如在生成密钥的时候生成长度随机的盐值;也可以进行测试和演练:可以使用随机数生成器来生产测试数据、观测数据等等;
总之,随机数的使用非常广泛,任何需要模拟随机的场景都可以使用 Java 提供的随机数生成器生成随机数。
我们大都有选择困难症,比如不知道午饭吃什么?很头疼!那就让上天来决定吧!我们使用 Java 随机数来随意抽取或是决定午饭。
import java.util.Random;
public class RandomLunch {
public static void main(String[] args) {
String[] foods = {"汉堡", "炸鸡", "披萨", "烤肉", "牛肉面", "米线", "酸菜鱼", "煲仔饭", "火锅", "小笼包"}; //可以选择的午餐品种
Random random = new Random();
int index = random.nextInt(foods.length); // 生成0到可选菜品数量之间的一个随机整数
String lunch = foods[index]; // 根据随机数选定菜品
System.out.println("午饭吃" + lunch);
}
}
上面的代码中,首先定义了一个数组中,存储了可以选择的午餐品种。然后使用 java.util.Random 类创建一个随机数生成器对象,使用 nextInt(int bound) 方法生成一个介于 0 和可选菜品数量之间的随机数。最后,使用这个随机数从菜品数组中选择一个菜品,将其存储到字符串变量 lunch 中,并输出午餐的选择结果。
在实际开发中,可以将类似的代码集成到提供菜品选择功能的系统中,方便办公室的小伙伴们快速决定午餐。
四、官方提示
java.util.Random 的实例是线程安全的。但是,跨线程并发使用同一个 java.util.Random 实例可能会遇到争用,从而导致性能下降。考虑在多线程设计中使用 java.util.concurrent.ThreadLocalRandom。
java.util.Random 的实例不是加密安全的。请考虑使用 java.security.SecureRandom 来获得加密安全的伪随机数生成器,以供对安全性敏感的应用程序使用。
总结
Java 随机数的使用场景还是很多的,所以我们要对其进行掌握,本文对 Java 生成随机数的类 Random 进行了简单介绍,如果想深入了解,要查看其源码,去实操,去探究。
关注公众号:编程火箭车
我们定期发布编程相关的文章、资讯、活动等内容。帮助编程爱好者、初学者或初级程序员快速入门、打牢基础。欢迎大家关注,和我们一起探索编程的精彩世界。
Java如何生成随机数?要不要了解一下!的更多相关文章
- Java如何生成随机数 - Random、ThreadLocalRandom、SecureRandom
Java7 的Random伪随机数和线程安全的ThreadLocalRandom 一.Random伪随机数: Random 类专门用于生成一个伪随机数,它有两个构造器: 一个构造器使用默认的种子(以当 ...
- JAVA中生成随机数Random VS ThreadLocalRandom性能比较
前言 大家项目中如果有生成随机数的需求,我想大多都会选择使用Random来实现,它内部使用了CAS来实现. 实际上,JDK1.7之后,提供了另外一个生成随机数的类ThreadLocalRandom,那 ...
- java中生成随机数
本文主要讲述java中如何生成随机数. public class RandomTest { public static void main(String[] args) { // 生成随机数 方法1: ...
- JAVA生成随机数
java中一般有两种随机数,一个是Math中random()方法,一个是Random类. 一.Math.random() 随即生成0<x<1的小数. 实例:如何写,生成随机生成出0~100 ...
- 利用Java API生成50到100之间的随机数
利用Java API生成50到100之间的随机数 /** * */ package com.you.demo; import java.util.Random; /** * @author Admin ...
- JAVA中生成指定位数随机数的方法总结
JAVA中生成指定位数随机数的方法很多,下面列举几种比较常用的方法. 方法一.通过Math类 public static String getRandom1(int len) { int rs = ( ...
- java 随机生成4位随机数
java 随机生成4位的随机数测试类 @org.junit.Testpublic void testRandom(){ String msg="您的注册码为%s,谢谢注册!"; S ...
- java生成随机数方法
java生成随机数方法: String random = String.valueOf(new Random().nextInt(9000)); String timestamp = String.v ...
- java在指定区间内生成随机数
Random对象生成随机数 首先需要导入包含Random的包 import java.util.Random; nextInt(int)方法将生成0~参数之间的随机整数但不包括参数. 例如生成0~99 ...
- Java生成随机数的4种方式
Random Random 类诞生于 JDK 1.0,它产生的随机数是伪随机数,也就是有规则的随机数.Random 使用的随机算法为 linear congruential pseudorandom ...
随机推荐
- 64位的单周期 RISC-V 模拟器
分享一个我最近完成过的小项目--64位的单周期 RISC-V 模拟器,这个项目我最近参与一生一芯计划过程中完成的一个小项目. 需要用到的相关知识:Verilog.Verilator.计算机组成原理.汇 ...
- TCC 分布式事务解决方案
更多内容,前往 IT-BLOG 一.什么是 TCC事务 TCC 是Try.Confirm.Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作:预处理Try.确认Confirm.撤销Canc ...
- 使用dataX收获的教训
首先是安装dataX,安装非常简单,只需下载对应的压缩包即可. 下载地址:https://github.com/alibaba/DataX 首先我出现的第一个错误:命令提示符界面出现出现乱码. 解决方 ...
- .net core基于HttpClient实现的网络请求库
Soda.Http 基于HttpClient封装的 Http 请求库.如果有什么好想法,可以提 Issue 或者 Pr.,如果想要使用,直接在nuget搜索Soda.Http即可. Github项目地 ...
- Python 3.11.官方文档
索引 模块 | Python » English Spanish French Japanese Korean Brazilian Portuguese Simplified Chinese Trad ...
- [云计算]杂谈:SaaS与PaaS的产品经理,做产品设计时有什么区别?[摘]
本文摘自: 郝雨彤@碧岸久 于 2022-09-20在社交平台中所表达的观点. 产品性质/类型 服务领域 服务对象(受众) 核心能力 SaaS 面向具体业务 (所属行业的)业务用户 很看重对业务的理解 ...
- python去掉重复值的方法--四种
my_list = [1,1,1,1,2,3,3,3,4,5,5,56,6,7,77,7,5,5,3]# 集合法:缺点是结果会打乱原始数据的顺序print(set(my_list)) # 列表法:缺点 ...
- ORA-01093: ALTER DATABASE CLOSE only permitted with no sessions connected DG开启MRP失败
问题描述:在10.2.0.5的备库中open状态下开启实时同步,开启失败.一直卡着,只能强制停止 SQL> alter database recover managed standby dat ...
- 程序猿要chatpgpt干掉了?
如何拥抱被chatpgpt拉开的人工智能大时代 昨天 chatgpt-4 发布了.我看到好多技术圈的人都惶恐着,以后咱们都要失业了/(ㄒoㄒ)/~~ 和之前差不多的是毫无意外地又引动了一大波舆论.虽然 ...
- ASP.NET Core Web API 流式返回,逐字显示
Websocket.SSE(Server-Sent Events)和长轮询(Long Polling)都是用于网页和服务端通信的技术. Websocket是一种全双工通信协议,能够实现客户端和服务端之 ...