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

news2025/4/11 23:19:21

目录

  • 前言
  • 一、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.coloradmin.cn/o/468546.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++篇----构造函数和析构函数

在很多时候,当写了初始化,动态开辟的,需要写销毁函数,写了销毁函数之后,但是却忘记了调用这些函数,忘记调用初始化函数还好,编译器会报错,但是如果是忘记调用销毁函数,那…

社科院与美国杜兰大学金融管理硕士项目——选择在职读研是正确的吗

这个世界上,根本没有正确的选择。我们只不过要努力奋斗,使当初的选择变得正确。最近有咨询项目的同学总是在纠结是否要在职读研,在职读研是否是一条正确的路。当我们为此纠结时,其实只有一条路,那就是选择向前走。往前…

有我和另一个00后卷王后,公司老油条们破防了吗?

今年软件测试行业的内卷现象越来越明显,比2022年疫情那会更甚,越来越多的人涌入这个行业,而想要获得更好的待遇和机会,不断提升自己的技能栈成为了测试老油条不得不面对的问题。 不论是哪个级别的测试工程师,面试官都…

络达开发---- AB1562x左右两侧同一按钮不同功能

开发平台:AB1562X SDK版本:V1.5.2 说明:AB1562X支持TWS,左右两个的耳机的按钮在硬件上是芯片的同一个IO口;那如何实现左右按键对应动作A,右侧按钮对应动作B呢?即左右两侧同一按钮的…

【创建一个网页,实现猜数字游戏】

要求如下 逻辑如下: 一个button按钮第二行中,打印“请…数字” 然后一个 输入文本框 然后一个 按钮第三行 打印 “已经猜的次数” 然后打印 猜的次数结果显示 猜大了 猜小了 猜对了 在script中 获取button按钮、输入的数据、记录count的值&#xff…

vue3——咸鱼仔

vue3——咸鱼仔 vue3——咸鱼仔P1.前言 【00:45】P2.创建项目 【02:09】P3.代码格式化 【01:37】P4.commit规范 【01:57】P5.强制commit 【02:41】P6.强制代码规范 【01:03】P7.按需导入elementplus 【02:58】P8.vue3.2新特性 【01:42】P9.初始化项目 【02:47】P10.登录页面静态…

融合开源软件治理经验,助力科技企业规避开源风险

随着开源软件的普及,越来越多的科技企业依赖开源软件实现业务的高速发展,但开源软件存在的安全合规问题,已成为科技企业面临的主要风险之一。 开源网安十年发展,通过为百度、大疆、金蝶等科技企业提供优质的软件安全产品与服务&a…

【虚幻引擎|UE4】TArray在C++中的使用

简介 TArray 类似于STL的vector,可以自动扩容,因为提供了相关操作函数,所以当作队列、栈、堆来使用也很方便,是UE4中最常用的容器类。其速度快、内存消耗小、安全性高。TArray 类型由两大属性定义:元素类型和可选分配…

smardaten社区版/专业版发布,查看特性与区别!

为满足个人和中小团队开发者需求,近期smardaten正式推出社区版与专业版,其中社区版为免费版本,支持一键下载安装。 值得一提的是,本次社区版和专业版,均支持独立私有部署,并进行商业应用交付。 熟悉smard…

Linux网络——Shell编程之条件语句—if 、case

Linux网络——Shell编程之条件语句—if 、case 一、条件测试1.test命令2.文件测试3.整数值比较4.逻辑测试 二、if语句1.单分支结构2.双分支结构3.多分支结构4.实践操作 三、case分支语句1.case多分支结构2.实践操作 一、条件测试 1.test命令 测试表达式是否成立,若…

信息收集(二)IP信息收集

信息收集(一)域名信息收集 什么是CDN? 内容分发网络(CDN): 是指企业利用分布在不同区域的节点服务器群组成流量分配管理平台,为用户提供内容分散存储和高速缓存服务 在渗透测试过程中&#x…

大数据好学么

大数据本质上是海量数据。 以往的数据开发,需要一定的Java基础和工作经验,门槛高,入门难。 如果零基础入门数据开发行业的小伙伴,可以从Python语言入手。 Python语言简单易懂,适合零基础入门,在编程语言…

kafka集群模拟单节点故障

这里通过kafka manage来展示节点宕机效果 现在三台主机节点均正常 topic正常识别到三个broker leader也均匀分配到了三个broker上 现在把节点id为0的主机模拟宕机 可以通过以上两张图片看到每个topic现在只识别到了两个broker节点,broker id为0的节点已经被剔除掉了 isr列…

SpringBoot框架(邮件发送Mail|持久层框架JPA|Extra前后端分离跨域处理|接口管理Swagger)这一篇就够了(超详细)

🙈作者简介:练习时长两年半的Java up主 🙉个人主页:老茶icon 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,计…

【Python表白集】没有哪个女孩子 不喜欢花 不喜欢惊喜:“一束花的仪式感,永远不会过时呢~”(turtle绘图代码)

导语 “我想和你在一起虚度时光,坐看云卷云舒,花开花落” 所有文章完整的素材源码都在👇👇 粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。 又快到了一年小长假的时候啦, 单身狗的你们还好嘛…

如何有效使用渲染农场?防止渲染出错的7个方法!

如何使用渲染农场?又如何有效地使用渲染农场,使用云渲染农场时出错怎么办? 众所周知我们可以在任意的笔记本或者终端PC上面来创作 3ds Max 场景,但是实际渲染是这样吗?其实不然,这其中的差距不是一星半点&…

在 iOS 16 中用 SwiftUI Charts 创建一个折线图

前言 苹果在 WWDC 2022 上推出了 SwiftUI 图表,这使得在 SwiftUI 视图中创建图表变得异常简单。图表是以丰富的格式呈现可视化数据的一种很好的方式,而且易于理解。本文展示了如何用比以前从头开始创建同样的折线图少得多的代码轻松创建折线图。此外&am…

Spring Security环境搭建

Spring Security环境搭建 Spring BootSpring Security 认证&#xff1a;判断用户是否是用户合法用户的过程授权&#xff1a;判断系统用户可以访问或访问哪些权限资源 环境搭建 创建springBoot项目并导入springsecurity相关的依赖。 <dependencies><dependency>…

翻转课堂,让传统的以教为中心变成以学中心

翻转教室的故事起源于2007年&#xff0c;美国科罗拉多州洛矶山林地公园高中 (Woodland Park High School)的化学老师Jon Bergmann 和Aaron Sams&#xff0c;为了解决同学的缺课&#xff0c;先将预录好的课程上传到YouTube网站&#xff0c;让学生自行上网浏览学习。 他们发现学…

YOLO物体检测系列1.经典方法概述及评价指标体现

1. 深度学习经典检测方法&#xff1a; two-stage(两阶段)&#xff1a; Faster-rcnn Mask-RCNN系列 one-stage(单阶段)&#xff1a;Yolo系列 两阶段&#xff1a;一阶段实现RPN候选区域预选 二阶段基于候选区域再进行检测回归分类任务 单阶段&#xff1a;一个CNN卷积网络实现检测…