在C#中,产生随机数常用大方法是 new Random().Next(1,10)等方法。

但是仔细发现会有个问题:

看代码:

for (int i = ; i < ;i++ )
{
Console.WriteLine(new Random().Next(, ));
}    Console.ReadKey();

运行结果:

发现随机的数基本都是一样的。就有问题了,每次随机的都是一样的,就不是随机数了。

仔细查看 Random的构造函数

public Random() : this(Environment.TickCount)
{
}
/// <summary>Initializes a new instance of the <see cref="T:System.Random" /> class, using the specified seed value.</summary>
/// <param name="Seed">A number used to calculate a starting value for the pseudo-random number sequence. If a negative number is specified, the absolute value of the number is used. </param>
[__DynamicallyInvokable]
public Random(int Seed)
{
int num = (Seed == -) ? : Math.Abs(Seed);
int num2 = - num;
this.SeedArray[] = num2;
int num3 = ;
for (int i = ; i < ; i++)
{
int num4 = * i % ;
this.SeedArray[num4] = num3;
num3 = num2 - num3;
if (num3 < )
{
num3 += ;
}
num2 = this.SeedArray[num4];
}
for (int j = ; j < ; j++)
{
for (int k = ; k < ; k++)
{
this.SeedArray[k] -= this.SeedArray[ + (k + ) % ];
if (this.SeedArray[k] < )
{
this.SeedArray[k] += ;
}
}
}
this.inext = ;
this.inextp = ;
Seed = ;
}

无参的构造函数其实调用的是 有参的构造函数,传递的 默认值: Environment.TickCount

System.Environment.TickCount 获取开机时间函数。

也就是说每次传递进去的都是一样的值。

如果我们,改下代码,给 new Random()传参.

 for (int i = ; i < ;i++ )
{
Console.WriteLine(new Random(Guid.NewGuid().GetHashCode()).Next(, ));
}

这次的运行结果:

明显的不一样了。就是随机的效果了。

还有一种方式也可以实现随机的效果:

     Random rnd = new Random(); //在外面生成对象
for (int i = ; i < ;i++ )
{
Console.WriteLine(rnd.Next(, )); //调用同一个 对象产生随机数。
}

运行结果:

也可以实现随机的效果。

C#中的 new Random()的更多相关文章

  1. Python从题目中学习:random() module

    最近在给公司培训Python,布置了一道题: ----------------------------------------------------------------------------- ...

  2. numpy中的np.random.mtrand.RandomState

    1 RandomState 的应用场景概述 在训练神经网络时,苦于没有数据,此时numpy为我们提供了 “生产” 数据集的一种方式. 例如在搭建神经网络(一)中的 4.3 准备数据集 章节中就是采用n ...

  3. python中的随机函数random的用法示例

    python中的随机函数random的用法示例 一.random模块简介 Python标准库中的random函数,可以生成随机浮点数.整数.字符串,甚至帮助你随机选择列表序列中的一个元素,打乱一组数据 ...

  4. java中的随机数Random

    java中一般有两种随机数,一个是Math中random()方法,一个是Random类. 一.Math.random()  :     随即生成0<x<1的小数 实例:如何写,生成随机生成 ...

  5. python3在pycharm中为什么导入random模块不能用? TypeError: 'module' object is not callable

    新手学python求大神指导,也用sys导入了random.py的路径,仍然不行. 刚刚排错貌似找到了问题的原因...那是因为我在pycharm中新建的python文件名就是random,所以当前目录 ...

  6. java中Scanner和random的用法

    Scanner是默认按照行来读取数字的. 创建一个用来输入的函数 Scanner scan=new Scanner(System.in):system.in是表示从控制台输入. 然后用一个变量类接收这 ...

  7. Python中模块之random的功能介绍

    random的功能介绍 random模块的方法如下: betavariate 获取一个range(0,1)之前的随机浮点数 方法:random.betavariate(alpha,beta) 返回值: ...

  8. js中Math之random,round,ceil,floor的用法总结

    1.Math.random(); 结果为0-1间的一个随机数(包括0,不包括1) 2.Math.floor(num); 参数num为一个数值,函数结果为num的整数部分(返回小于等于n的最大整数). ...

  9. python中numpy的random模块

    1. rand(d0,d1,.....,dn)产生[0,1]的浮点随机数,括号里面的参数可以指定产生数组的形状    例如:np.random.rand(3,2)则产生 3×2的数组,里面的数是0-1 ...

随机推荐

  1. python学习笔记-学习大纲

  2. 理解Solr缓存及如何设置缓存大小

    文献地址:http://wangdg.com/understanding-and-tuning-solr-cache/ 理解Solr缓存及如何设置缓存大小 为了得到最好的检索性能,Solr会在内存中缓 ...

  3. Ubuntu下RabbitMQ安装

    由于RabbitMQ需要erlang语言的支持,在安装RabbitMQ之前需要安装erlang,执行命令: sudo apt-get install erlang-nox 安装RabbitMQ命令: ...

  4. JVM总结-java对象的内存布局

    在 Java 程序中,我们拥有多种新建对象的方式.除了最为常见的 new 语句之外,我们还可以通过反射机制.Object.clone 方法.反序列化以及 Unsafe.allocateInstance ...

  5. (转)CSS3:nth-child()伪类选择器,奇偶数行自定义样式first-child

    原文地址 Table表格奇偶数行定义样式: CSS3的强大,让人惊叹,人们在惊喜之余,又不得不为其艰难的道路感到可惜:好的标准只有得到行业浏览器的良好支持才算得上“标准”.CSS3标 准已提出数年,但 ...

  6. ROS 进阶学习笔记(12) - Communication with ROS through USART Serial Port

    Communication with ROS through USART Serial Port We always need to communicate with ROS through seri ...

  7. uva-270-排序

    题意:很多个点,问,最多有多少个点在同一条直线上 #include <algorithm> #include <iostream> #include <string> ...

  8. java中的排序--排序容器_TreeSet与TreeMap

    1.TreeSet:数据元素可以排序且不可重复. 对比: (1)Set接口:HashSet,元素必须重写hashcode和equals方法. (2)TreeSet:只要可以排序即可.去重:比较等于0即 ...

  9. log-bin

    装mysql,运行一段时间后,在mysql目录下出现一堆类似mysql-bin.000***,从mysql-bin.000001开始一直排列下来,而且占用了大量硬盘空间,高达几十个G. 对于这些超大空 ...

  10. react-native 相对项目路径导入组件

    在使用react-native的时候,经常要自定义很多组件,但是只能使用../../../的方式,如果目录多了一长串,书写很烦,看着也不好看. 方法一: 例如你想引入utils里面的文件,不想../. ...