答:
int[] intArr=new int[100];
ArrayList myList=new ArrayList();
Random rnd=new Random();
while(myList.Count<100)
{
int num=rnd.Next(1,101);
if(!myList.Contains(num))
myList.Add(num);
}
for(int i=0;i<100;i++)
intArr[i]=(int)myList[i];
Random类表示伪随机数生成器,它是生成满足某些随机性统计要求的数字序列的设备。
基本用法:
//使用随机数填充指定字节数组的元素。
byte[] bytes = new byte[5];
rand.NextBytes(bytes);
//返回非负随机整数。
Console.Write("{0,15:N0}", rand.Next());
//返回小于指定最大值的非负随机整数。
Console.Write("{0,8:N0}", rand.Next(101));
//返回指定范围内的随机整数。
Console.Write("{0,8:N0}", rand.Next(50, 101));
//返回大于或等于0.0且小于1.0的随机浮点数。
Console.Write("{0,8:N3}", rand.NextDouble());
Console.Write("{0,8:N3}", rand.NextDouble() * 5);
演示:*
using System;
class Program
{
static void Main()
{
//创建新的Random对象.
Random random = new Random();
//获取3个随机数.
//这些总是5,6,7,8或9.
Console.WriteLine("RANDOM: " + random.Next(5, 10));
Console.WriteLine("RANDOM: " + random.Next(5, 10));
Console.WriteLine("RANDOM: " + random.Next(5, 10));
}
}
加密:
对于简单的任务,Random类就足够了。但对于复杂的事物,RNGCryptoServiceProvider更好。
using System;
class Program
{
static void Main()
{
//调用使用类级Random的方法.
UseStatic();
//调用相同的方法.
//随机数序列仍然是随机的.
UseStatic();
}
static Random _random = new Random();
static void UseStatic()
{
//使用类级随机。
int result = _random.Next();
Console.WriteLine("STATIC RANDOM: " + result);
}
}
使用字段或传递Random作为参数以避免重复的随机数。
class Program
{
static void Main()
{
Test();
Test();
Test();
}
static void Test()
{
/创建随机并使用它。
//这是时间相关的,所以如果多次调用可以重复。
var random = new System.Random();
System.Console.WriteLine("CURRENT: " + random.Next());
}
}
将整数传递给Random.Next()时,得到的结果范围为0到maxValue - 1。
using System;
class Program
{
static void Main()
{
F();
F();
F();
F();
F();
F();
}
static Random _r = new Random();
static void F()
{
int n = _r.Next(5);
//可以返回0,1,2,3或4。.
Console.WriteLine(n);
}
}
ToArray将语句中的可枚举字母再次转换为字符串,生成最终结果:随机字符串。
using System;
using System.Linq;
class Program
{
static void Main()
{
const string original = "senators";
Random num = new Random();
//从重新排序的char数组中创建新字符串。.
string rand = new string(original.ToCharArray().
OrderBy(s => (num.Next(2) % 2) == 0).ToArray());
Console.WriteLine("original: {0}\r\nrand: {1}",
original,
rand);
Console.Read();
}
}
在Random类型上调用NextBytes方法以获取随机字节数组。每个字节的小数范围为0到255。
using System;
class Program
{
static void Main()
{
//将随机字节放入此数组中.
byte[] array = new byte[8];
//使用Random class和NextBytes方法。
//使用以下方法显示字节。.
Random random = new Random();
random.NextBytes(array);
Display(array);
random.NextBytes(array);
Display(array);
}
static void Display(byte[] array)
{
//循环并显示数组中的字节.
foreach (byte value in array)
{
Console.Write(value);
Console.Write(' ');
}
Console.WriteLine();
}
}
使用随机整数预先填充List。
using System;
using System.Collections.Generic;
using System.Diagnostics;
class Program
{
static Random _random = new Random();
static List _randomCache = new List();
static void AddRandoms()
{
//将随机数添加到列表中供以后使用.
for (int i = 0; i < 1000; i++)
{
_randomCache.Add(_random.Next());
}
}
const int _max = 10000000;
static void Main()
{
//预先计算一些随机的int.
AddRandoms();
//获取新的随机int.
var s1 = Stopwatch.StartNew();
for (int i = 0; i < _max; i++)
{
int random = _random.Next();
if (random < 0)
{
return;
}
}
s1.Stop();
//从列表中使用缓存的随机int.
var s2 = Stopwatch.StartNew();
for (int i = 0; i < _max; i++)
{
int random = _randomCache[i % _randomCache.Count];
if (random < 0)
{
return;
}
}
s2.Stop();
Console.WriteLine(((double)(s1.Elapsed.TotalMilliseconds * 1000000) /
_max).ToString("0.00 ns"));
Console.WriteLine(((double)(s2.Elapsed.TotalMilliseconds * 1000000) /
_max).ToString("0.00 ns"));
}
}