产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。

答:

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"));
    }
}

你可能感兴趣的:(asp.net,c#)