编程小知识之 Random接口返回值

49 篇文章 1 订阅

本文简述了 Random 接口返回值的一些相关信息

平日工作中,(伪)随机数的使用一定是避不开的,拿 C# 为例,System 命名空间下的 Random 类型一般都是我们生成(伪)随机数的第一选择:

var rand = new System.Random();
var val = rand.NextDouble();

Unity 中也在 UnityEngine 命名空间下提供了自己的 Random 类型,不过接口方法上都是静态类型:

var val = UnityEngine.Random.value;

上述的接口方法使用上似乎都很简单,但是深入一下接口细节,可能就不是所有同学都了解了,甚至还会产生混淆:

System.Random 的 NextDouble 方法返回的(伪)随机数的范围是多少? 那么 UnityEngine.Random.value 呢?

很多同学可能都知道答案: 0.0 ~ 1.0

那么接着问:

这些返回值包含 0.0 和 1.0 这两个端点吗?

到这里可能有些同学就会有些混淆了,答案是这样的:

System.Random 的 NextDouble 的返回值范围 >= 0.0 并且 < 1.0, 即 [0.0, 1.0)

UnityEngine.Random.value 的返回值范围 >= 0.0 并且 <= 1.0, 即 [0.0, 1.0]

两者的返回值范围不同导致了混淆的产生,使用时不加注意的话自然也会导致错误.

这里将相关常用的 Random 方法以表格列出,方便记忆和查阅:

类型方法返回值
System.RandomNext()[0, int.MaxValue)
System.RandomNext(int max)[0, max)
System.RandomNext(int min, int max)[min, max)
System.RandomNextDouble()[0.0, 1.0)
UnityEngine.RandomRange(int min, int max)[min, max)
UnityEngine.RandomRange(float min, float max)[min, max]
UnityEngine.Randomvalue[0.0f, 1.0f]

注意到下面一点可能有助于我们的记忆:

Random 接口方法的返回值范围一般都是左闭右开的,仅 UnityEngine.RandomRange(float min, float max)value 两个方法的返回值范围是全闭区间.

参考
  1. System.Random Doc
  2. UnityEngine.Random Doc
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值