当前位置: 首页 > news >正文

【Rust入门】生成随机数

文章目录

  • 前言
  • 随机数库rand
  • 添加rand库到我们的工程
  • 生成一个随机数
    • 示例代码
  • 总结


前言

在编程中,生成随机数是一种常见的需求,无论是用于数据分析、游戏开发还是模拟实验。Rust提供了强大的库来帮助我们生成随机数。在这篇文章中,我们将通过一个简单的示例来介绍如何在Rust中生成随机数。无论你是一位经验丰富的程序员,还是刚刚开始接触编程,我相信你都会从这个项目中学到一些有用的东西。


随机数库rand

他是一个库,不是rust自带的,他的介绍在这里:rand 库
Rust的rand库是一个用于生成随机数的库。它提供了一系列的方法和工具,可以用来生成各种类型和范围的随机数。

rand库中,最核心的部分是随机数生成器Rng。你可以通过thread_rng来获取一个随机数生成器。这个生成器可以用来生成各种类型的随机数,例如无符号整数(u8, u16, u32等)、有符号整数(i8, i16, i32等)和浮点数(f32, f64)。

此外,rand库还提供了一些其他的功能,例如生成指定范围内的随机数,生成随机布尔值,甚至生成随机字符串。这些功能使得rand库在很多场景下都非常有用,比如在需要随机化的算法中,或者在需要生成测试数据的时候。

Rust的rand库是一个强大而灵活的工具,它可以帮助你在Rust程序中方便地生成随机数。

添加rand库到我们的工程

打开我们的cargo.toml文件,在[dependencies]下面添加我们需要的库:
库名称="版本号"

在此刻,最新的rand版本号为:
在这里插入图片描述
.toml文件中,[dependencies]部分用于声明项目的依赖包。当你在依赖的版本号前面加上^时,这被称为跳脱条件。

跳脱条件允许SemVer兼容的更新指定版本。新的版本允许更新的条件是,不修改最左边的非零数字(无论是major,minor,还是patch)。例如,如果我们指定了^1.2.3,那么允许的版本范围就是>=1.2.3 <2.0.0。这意味着,只要新版本的主要版本号(major)不变,那么就可以使用新版本。

现在,我们就安装好了我们所需要的东西

生成一个随机数

rand::thread_rng()是Rust的rand库中的一个函数,它用于获取当前线程的随机数生成器。

在Rust中,每个线程都有自己的随机数生成器,这样可以避免在多线程环境中对随机数生成器的竞争。rand::thread_rng()函数就是用来获取当前线程的随机数生成器的。

获取到随机数生成器后,你就可以使用它来生成随机数了。例如,你可以调用gen()方法来生成一个随机数,或者调用gen_range()方法来生成一个指定范围内的随机数。

在Rust的rand库中,你可以使用gen_range方法来生成一个指定范围内的随机数。这个方法接受两个参数,分别是范围的下限和上限,并返回一个在这个范围内的随机数。

以下是一个简单的示例,展示了如何生成一个在1到100之间的随机整数:

use rand::Rng;fn main() {let mut rng = rand::thread_rng();let number = rng.gen_range(1..101);println!("随机数是: {}", number);
}

在这个例子中,rng.gen_range(1..101)会生成一个在1(包含)到101(不包含)之间的随机数。然后我们将这个随机数打印出来。

需要注意的是,gen_range方法的范围是半开的,也就是说,它包含下限,但是不包含上限。所以如果你想要生成一个在1到100之间的随机数,你需要写成1..101,而不是1..100

示例代码

use std::io;
use rand::Rng;fn main() {println!("Guess the number:");let secret_number = rand::thread_rng().gen_range(1..101);println!("secret_number:{}",secret_number);let mut guess = String::new();io::stdin().read_line(&mut guess).expect("Failed to read line");println!("You guessed: {}", guess);
}

总结

通过完成这个项目,我们已经对Rust中如何生成随机数有了一个基本的了解。我们学习了如何使用Rust的随机数库,以及如何生成不同类型和范围的随机数。虽然我们还有很多东西要学,但这个项目已经给我们提供了一个坚实的基础,我们可以在此基础上继续探索Rust的更多功能。记住,最好的学习方法就是动手实践。所以,不要停下来,继续探索Rust吧!

相关文章:

  • decode()方法——解码字符串
  • tp8 mysql8原生查询统计
  • Python学生信息管理系统(完整代码)
  • PhysioLLM 个性化健康洞察:手表可穿戴设备实时数据 + 大模型
  • 代码随想录训练营第二十八天 122买卖股票的最佳时间II 55跳跃游戏 45跳跃游戏II 1005K次取反后最大化的数组和
  • 使用React复刻ThreeJS官网示例——keyframes动画
  • #数据结构 笔记三
  • 上海市计算机学会竞赛平台2023年6月月赛丙组选取子段(二)
  • webrtc-m120编译 (m126)
  • 深入浅出mysql分库分表
  • JAVA学习笔记2
  • Python 学习之常用第三方库(五)
  • 逻辑这回事(七)---- 器件基础
  • Docker 容器网络互连 自定义网络 程序互相访问
  • Java中集中常见的算法
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • angular组件开发
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • mongodb--安装和初步使用教程
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • nginx 配置多 域名 + 多 https
  • PHP的Ev教程三(Periodic watcher)
  • Python利用正则抓取网页内容保存到本地
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 高度不固定时垂直居中
  • 将 Measurements 和 Units 应用到物理学
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 入口文件开始,分析Vue源码实现
  • 延迟脚本的方式
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • 阿里云移动端播放器高级功能介绍
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • #laravel 通过手动安装依赖PHPExcel#
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转) 深度模型优化性能 调参
  • (转)VC++中ondraw在什么时候调用的
  • ***利用Ms05002溢出找“肉鸡
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .NET技术成长路线架构图
  • .NET学习教程二——.net基础定义+VS常用设置
  • .考试倒计时43天!来提分啦!
  • /*在DataTable中更新、删除数据*/
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @Bean, @Component, @Configuration简析
  • @Import注解详解
  • @SuppressWarnings(unchecked)代码的作用
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票
  • [AutoSar]BSW_OS 02 Autosar OS_STACK
  • [Avalon] Avalon中的Conditional Formatting.