Unity C# 在区间内生成不重复的随机数


void Start()
    {
        PrintNum();
    }


/// <summary>
    /// 生成随机数
    /// </summary>
    /// <param name="num">随机数个数</param>
    /// <param name="min">最小随机数(不包含)</param>
    /// <param name="max">最大随机数(不包含)</param>
    /// 取数范围不包含最大值最小值
    /// 最大值不可以小于总数,否则会出错
    /// <returns></returns>
    private  Hashtable GetHashtableRandomNum(int num, int min, int max)
    {
        System.Random random = new System.Random();//新建随机数
        Hashtable hashtable = new Hashtable();//新建哈希表
        if (num<max)
        {
            for (int i = 0; hashtable.Count < num; i++)
            {
                int nValue = random.Next(min, max);//返回一个非负的随机数,不包含最大值
                                                   //判断数字是否重复,且不小于最小值
                if (!hashtable.ContainsValue(nValue) && nValue != min)
                {
                    hashtable.Add(i, nValue);//将不重复的数放入哈希表
                }
            }
        }
        else
        {
             //错误提示
            throw new System.Exception(string.Format("总数数值 {0} 大于或等于最大值 {1} ",num,max));
        }
        //返回已经初始化赋值的哈希表
        return hashtable;
    }


 /// <summary>
    /// 遍历表中数据
    /// </summary>
    private void PrintNum()
    {
       //注意:随机数是什么数据类型,要在遍历循环里面设置好,如果设置为var 则返回的随机数数据类型为Object
        foreach (int item in GetHashtableRandomNum(8, 0, 9).Values)
        {
            Debug.Log(item);
        }
    }

1.用到哈希表放置随机数,凭个人意愿可以设为字典或泛型。

2.设置随机数范围时,千万不要使随机数总和(Num)小于最大随机数范围(Max),否则系统在运行生成随机数循环时会一直加载,卡死。只能强行退出程序解决

3.代码可以根据个人意愿更改

4.代码非原创

猜你喜欢

转载自blog.csdn.net/podaosanshiliu/article/details/125871765