C#的Random类是用于生成随机数的类,属于System命名空间,可以生成各种类型的随机数,例如整型、双精度浮点型、布尔型等。
Next
C#中用Random类来生成随机数,其最简单的调用方式如下
// 本代码写在顶级语句中
Random r = new Random();
Console.WriteLine(r.Next(100));
会输出一个100以内的整数。当Next输入两个参数时,那么这两个参数分别表示最小值和最大值。若无输入参数,则会返回一个非负随机整数。
很多情况下,算法需要复现,故而需要设置一个随机数种子,以保证每次运行程序都能得到相同的结果。其方法很简单,只是让构造函数多一个参数而已
Random r = new Random(42);
Console.WriteLine(r.Next(100)); //返回值是66
不同的数据类型
Random封装了多个随机数生成方法,可供输出不同类型的随机数,列表如下
方法 | 说明 |
---|---|
NextBytes | 用随机数填充指定字节范围或字节数组 |
NextDouble | 返回随机浮点数 |
NextInt64 | 返回随机64位整数,其输入参数与Next相同 |
NextSingle | 返回一个 [ 0 , 1 ) [0,1) [0,1)区间的浮点数 |
上述方法当然没有囊括所有类型,但只要有了整型,那么就可以随机抽取某个数组,进而在指定范围内随机挑选出一个结果。根据这种思想,可以自行编写随机字符或者布尔型随机数,示例如下
// 随机布尔型
bool nextBool()
{
bool[] b = {
true, false };
Random r = new Random();
return b[r.Next(2)];
}
Console.WriteLine(nextBool());
Shuffle
Shuffle方法的作用是将一个数组打乱,示例如下
var xs = Enumerable.Range(0, 10).ToArray();
Random r = new Random(42);
r.Shuffle(xs);
foreach (var x in xs)
Console.WriteLine(x);
由于指定了随机数种子,所以打乱的结果是一致的,最后打印出来的结果均为下面这些
6 2 3 0 5 1 8 4 7 9 \begin{aligned}6\\2\\3\\0\\5\\1\\8\\4\\7\\9\\\end{aligned} 6230518479