C如何从列表里取随机数,C#如何从一个列表里取一个随机数?

2020-12-09 06:34:44 字数 4938 阅读 4941

1楼:匿名用户

输入:列表 输出:随机元素

public t getrandomitem(ilistlist)sh

2楼:匿名用户

random对象就是生成随机数的!

在c#中,怎么产生一个随机数?

3楼:匿名用户

.***.frameword中提供了一个专门产生随机数的类system.

random,此类默认情况下已被导入,编程过程中可以直接使用。我们知道,计算机并不能产生完全随机的数字,它生成的数字被称为伪随机数,它是以相同的概率从一组有限的数字中选取的,所选的数字并不具有完全的随机性,但就实用而言,其随机程度已经足够了。

可以用以下两种方法初始化一个随机数发生器;

函数是这样用,比如100至999的随机数

random ran=new random();

int randkey=ran.next(100,999);

不过这样会有重复,可以给random一个系统时间做为参数,以此产生随机数,就不会重复了

第一种方法不指定随机种子,系统自动选取当前时前作随机种子:

random ra=new random();

第二种方法是指定一个int型的参数作为随机种子:

int iseed=6;

random ra=new random(iseed);

下面我们要用到random.next()方法产生随机数。

ra.next();

它返回一个大于或等于零而小于2,147,483,647的数,这并不满足我们的需要,下面我们介绍它的重载函数和其它一些方法。

public virtual int next(int);

用法:ra.next(20)

返回一个小于所指定最大值(此处为20)的正随机数。

public virtual int next(int minvalue, int maxvalue);

用法:ra.next(1,20)

返回一个指定范围内(此处为1-20之间)的随机数,我们在下面的实例中会用到此函数。

类system.random还有几个方法分别是:

公共方法:

nextbytes用随机数填充指定字节数组的元素。

nextdouble返回一个介于 0.0 和 1.0 之间的随机数。

受保护的方法:

sample返回一个介于 0.0 和 1.0 之间的随机数,只允许子类对象访问。

以上介绍了随机数的基本用法,下面我们用一个实例来做更进一步的介绍。要在一段数字区间内随机生成若干个互不相同的随机数,比如在从1到20间随机生成6个互不相同的整数。

主要是下面两个函数getrandomnum与getnum:

public int getrandomnum(int num,int minvalue,int maxvalue)

return arrnum;

}getrandomnum即是在区间[minvalue,maxvalue]取出num个互不相同的随机数,返回的数组包含着结果。

其中随机数是这样创建的 random ra=new random(unchecked((int)datetime.now.ticks));为什么不用random ra=new random();(系统自动选取当前时前作随机种子)

用系统时间做随机种子并不保险,如果应用程序在一个较快的计算机上运行,则该计算机的系统时钟可能没有时间在此构造函数的调用之间进行更改,random 的不同实例的种子值可能相同。这种情况下,我们就需要另外的算法来保证产生的数字的随机性。所以为了保证产生的随机数足够"随机",我们不得不使用复杂一点的方法来获得随机种子。

在上面的这段程序中,我们首先使用系统时间作为随机种子,然后将上一次产生的随机数跟循环变量和一个与系统时间有关的整型参数相乘,以之作为随机种子,从而得到了每次都不同的随机种子,保证了产生足够"随机"的随机数。

函数getnum是一递归,用它来检测生成的随机数是否有重复,如果取出来的数字和已取得的数字有重复就重新随机获取。值得注意的是要用一同一个随机数实例生成,所以ra要作为参数传入getnum中,否则生成的数字会有重复。

public int getnum(int arrnum,int tmp,int minvalue,int maxvalue,random ra)

n ;}

return tmp;

}最后就是要显示出来,当点击一个button时取出的数字显示在一个label中。

private void button1_click(object sender, system.eventargs e)

label1.text=temp; //显示在label1中}

c#中如何从数组中获取一个随机数

4楼:匿名用户

最简单的就是用random产生1个随机数,随机数的范围为0~xx.length-1;这样的话比如数组是20个数,那么残生的随机数n就在(0~19)之间,然后把n带进数组xx[n]就可以取出随机索引的数了撒~ int xx = new int [3] ;

random r = new random(); int n = r.next(0, xx.length-1);xx[n]就是随机取出的数

5楼:匿名用户

通过使用random自动生成一个随机数,确定数组的下标,从而活得随机一个数组

string item=new string[4] ;

random r = new random();

string fi1 = item[r.next(item.length)];

6楼:匿名用户

在c#中获取随机数有三种方法:

一.random 类random类默认的无参构造函数可以根据当前系统时钟为种子,进行一系列算法得出要求范围内的伪随机数.view sourceprint?

1    random rd = new random(); 2    int i = rd.next();这种随机数可以达到一些要求较低的目标,但是如果在高并发的情况下,random类所取到的系统时钟种子接近甚至完全一样,就很有可能出现重复,这里用循环来举例view sourceprint? 1for (int i = 0; i < 10; i++) 2这个例子会输出10个相同的"随机数".

突显出的问题:因为random进行伪随机数的算法是固定的,所以根据同一个种子计算出的数字必然是一样的.而以当代计算机的运行速度,该循环几乎是在瞬间完成的,种子一致,所以会出现10次循环输出同一随机数的情况.

二.guid 类system.guidguid (globally unique identifier) 全球唯一标识符guid的计算使用到了很多在本机可取到的数字,如硬件的id码,当前时间等.

所计算出的128位整数(16字节)可以接近唯一的输出.view sourceprint? 1    console.

writeline(guid.newguid().tostring());

计算结果是******xx-***x-***x-***x-************结构的16进制数字.

三.rngcryptoserviceprovider 类system.security.

cryptography.rngcryptoserviceprovider rngcryptoserviceprovider 使用加密服务提供程序 (csp) 提供的实现来实现加密随机数生成器 (rng)view sourceprint? 1rngcryptoserviceprovider csp = new rngcryptoserviceprovider(); 2byte bytecsp = new byte[10]; 3csp.

getbytes(bytecsp); 4console.writeline(bitconverter.tostring(bytecsp));因该类使用更严密的算法.

所以即使如下放在循环中,所计算出的随机数也是不同的.view sourceprint? 1for (int i = 0; i < 10; i++) 2view sourceprint?

1但是rngcryptoserviceprovider的计算较为繁琐,在循环中使用会消耗造成大量的系统资源开销,使用时需注意.

四.membership.generatepassword()membership是一个方便快捷的进行角色权限管理的类,偶然发现一个很有意思的方法,跟随机数也擦点边吧view sourceprint?

01public static string generatepassword(int length, int numberofnonalphanumericcharacters); 02// 03// 摘要: 04// 生成指定长度的随机密码。 05// 06// 参数:

07// numberofnonalphanumericcharacters: 08// 生成的密码中的标点字符数。 09// 10// length:

11// 生成的密码的字符数。长度必须介于 1 和 128 个字符之间。 12// 13// 返回结果:

14// 指定长度的随机密码。

例:view sourceprint? 1for (int i = 0; i < 10; i++) 2

7楼:匿名用户

int xx = new int[3] ;

int x;

random r = new random();

x = r.next(4, 6);

c#怎么在list集合中随机取出一个值

8楼:小唯殿

刚刚有个人说的对,但是有些笼统

randomrm=newrandom();

inti=rm.next(list.count)//随机数最大值不能超过list的总数

list[i];

这样就可以,

内当然,省下来

容i其实也可以

c如何把数字随机分成多个数字,c# 如何把一个数字随机分成多个数字

1楼 匿名用户 1 在1000以内取9个随机数 2 把9个数从小到大排序 3 用第一个数减去0,第二个数减去第一个数,第三个数减去第二个数。。。一直到用1000减去第9个数 4 第3步中,每次相减得的差就是分得的一份。 2楼 匿名用户 生成随机数就得了。 random r new random a1...