C#中的 new Random()
在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()的更多相关文章
- Python从题目中学习:random() module
最近在给公司培训Python,布置了一道题: ----------------------------------------------------------------------------- ...
- numpy中的np.random.mtrand.RandomState
1 RandomState 的应用场景概述 在训练神经网络时,苦于没有数据,此时numpy为我们提供了 “生产” 数据集的一种方式. 例如在搭建神经网络(一)中的 4.3 准备数据集 章节中就是采用n ...
- python中的随机函数random的用法示例
python中的随机函数random的用法示例 一.random模块简介 Python标准库中的random函数,可以生成随机浮点数.整数.字符串,甚至帮助你随机选择列表序列中的一个元素,打乱一组数据 ...
- java中的随机数Random
java中一般有两种随机数,一个是Math中random()方法,一个是Random类. 一.Math.random() : 随即生成0<x<1的小数 实例:如何写,生成随机生成 ...
- python3在pycharm中为什么导入random模块不能用? TypeError: 'module' object is not callable
新手学python求大神指导,也用sys导入了random.py的路径,仍然不行. 刚刚排错貌似找到了问题的原因...那是因为我在pycharm中新建的python文件名就是random,所以当前目录 ...
- java中Scanner和random的用法
Scanner是默认按照行来读取数字的. 创建一个用来输入的函数 Scanner scan=new Scanner(System.in):system.in是表示从控制台输入. 然后用一个变量类接收这 ...
- Python中模块之random的功能介绍
random的功能介绍 random模块的方法如下: betavariate 获取一个range(0,1)之前的随机浮点数 方法:random.betavariate(alpha,beta) 返回值: ...
- js中Math之random,round,ceil,floor的用法总结
1.Math.random(); 结果为0-1间的一个随机数(包括0,不包括1) 2.Math.floor(num); 参数num为一个数值,函数结果为num的整数部分(返回小于等于n的最大整数). ...
- python中numpy的random模块
1. rand(d0,d1,.....,dn)产生[0,1]的浮点随机数,括号里面的参数可以指定产生数组的形状 例如:np.random.rand(3,2)则产生 3×2的数组,里面的数是0-1 ...
随机推荐
- Java - 26 Java 数据结构
Java 数据结构 Java工具包提供了强大的数据结构.在Java中的数据结构主要包括以下几种接口和类: 枚举(Enumeration) 位集合(BitSet) 向量(Vector) 栈(Stack) ...
- WPF简单实用方法(持续更新)
1:点击退出提示框 MessageBoxResult result = MessageBox.Show("你真的要退出吗?", "", MessageBoxBu ...
- 修改windows服务的描述
sc description xxxxxxxxxx "需要修改成的描述" sc 是主命令 description 是这个主命令的具体command xxxxxxxxxx 是服 ...
- months_between
select months_between(to_date('2016.01.29','yyyy.mm.dd'), to_date('2016.02.29','yyyy.mm.dd')) from ...
- HPROF - Heap Profile
基于动态链接库实现,可用于性能分析,锁内容.诊断memory leak问题等.获得堆开辟信息 java -agentlib:hprof=heap=sites ToBeProfiledClass 帮助文 ...
- c++官方文档-copy constructor
#include <iostream> using namespace std; class Example5 { string* ptr; public: Example5(const ...
- 浮动ip原理及简单实现
原理:https://blog.csdn.net/readiay/article/details/53538085 简单实现:https://www.cnblogs.com/victorwu/p/70 ...
- RHEL yum
一.YUM源配置 使用RHEL自带的yum时会显示 #This system is not registered to Red Hat Subscription Management. You can ...
- Linux文件浏览命令
1.cat 命令 快快捷查看当前文件的内容.cat适合查看少量信息的文件 cat file 2.more 命令 分页显示文件内容 more file 操作: enter ...
- RMI non-JRMP server at remote endpoint
又是一个jmx问题 jmx明明端口占用了, 而且相关java进程也起来了, 为什么会不能通过jconsole访问jmx呢?总是:RMI non-JRMP server at remote endpoi ...