Java如何生成随机数?要不要了解一下

news/2024/12/2 17:36:41/

目录

  • 前言
  • 一、Random类介绍
  • 二、Random类生成随机数
    • 1.生成随机数
    • 2.nextInt()方法
  • 三、使用场景
  • 四、官方提示
  • 总结


前言

我们在学习 Java 基础时就知道可以生成随机数,可以为我们枯燥的学习增加那么一丢丢的乐趣。本文就来介绍 Java 随机数。


一、Random类介绍

在 Java 中使用 Random 工具类来生成随机数,该类在 java.util 包下,在 JDK1.0 版本就存在了。Random 单词本身就是随机、随意、任意的意思。Random 是一个普通类,所以在使用时需要创建 Random 对象,在调用其提供的方法。

public class Random implements java.io.Serializable {}

Random 类提供了诸多方法,如下图:
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 进行了简单介绍,如果想深入了解,要查看其源码,去实操,去探究。


http://www.ppmy.cn/news/53129.html

相关文章

生成式AI火爆全球,你是否已经做好了准备?

2023年,随着ChatGPT的火爆全球,生成式AI也引发了各界人士的广泛关注。一时间,从国际科技巨头到国内人工智能企业,几乎所有我们耳熟能详的科技公司,都纷纷杀入了生成式AI市场。 作为全球云计算技术的开创者和领导者&…

Unity-ML-Agents-Example Learning Environments-环境解析

文档地址:https://github.com/Unity-Technologies/ml-agents/blob/release_19/docs/Learning-Environment-Examples.md 目录 1.Push Block 1.1 Behavior Parameters 1.1.1 为什么是70个变量,为什么是14条射线? 1.1.2 Float Properties 是…

推荐 7 个超牛的 Spring Cloud 实战项目

个 把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,这就是微服务架构的架构概念,通过将功能分解到各个离散的服务中以实现对解决方案的解耦。 关于微服务相关的学习资料不多,而 GitHub 上的开源项目可以作为你微服务之旅…

python 从外部直接传递参数 调用某个函数 打印一下外部参数

为了从外部传递参数给 Python 程序,并调用一个特定的函数,我们可以使用 Python 的内置库 argparse。在这个例子中,我们将创建一个名为 example.py 的 Python 文件,该文件包含一个名为 print_args 的函数,该函数将接收并…

基于springboot的前后端分离的案列(一)

SpringBootWeb案例 前面我们已经讲解了Web前端开发的基础知识,也讲解了Web后端开发的基础(HTTP协议、请求响应),并且也讲解了数据库MySQL,以及通过Mybatis框架如何来完成数据库的基本操作。 那接下来,我们就通过一个案例&#xf…

linux系统中利用QT实现串口通信的方法

大家好,今天主要和大家分享一下,如何使用QT中的串口通信方法。 目录 第一:资源简介 第二:应用实例的具体实现 第三:程序运行效果 第一:资源简介 在开发板的资源中出厂系统中,默认已经配置了两…

Microsoft Sensitive Label部署方案

目录 前言 一、目标 二、建立完整的Azure信息保护环境 三、部署Microsoft Sensitive Label 3.1 执行缺省配置</

TEB算法实现步骤

以下是TEB算法的基本步骤&#xff1a; 初始化机器人的起始姿态和目标姿态。 根据机器人的动态约束和环境中的障碍物生成一系列候选路径。 对于每个候选路径&#xff0c;计算其路径长度和与目标姿态的距离。 根据路径长度和距离&#xff0c;对候选路径进行排序&#xff0c;选…