C# 生成随机数数组

C# 生成随机数数组

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Tools
{
    public class randoms
    {
        // 随机变量
        private static Random ra = new Random(unchecked((int)DateTime.Now.Ticks));

        /// 
        /// 生成单精度随机数列表
        /// 
        /// 最小值
        /// 最大值
        /// 随机个数
        /// 随机数列表
        public static float[] RandomFloat(float minValue, float maxValue, int num)
        {
            float[] arrNum = new float[num];

            float tmp = 0;
            for (int i = 0; i <= num - 1; i++)
            {
                tmp = GetRandomFloat(minValue, maxValue);
                arrNum[i] = tmp;
            }
            return arrNum;
        }

        /// 
        /// 生成单精度随机数列表  有最小间隙
        /// 
        /// 最小值
        /// 最大值
        /// 个数
        /// 最小间隙
        /// 随机数列表
        public static float[] RandomFloatGap(float minValue, float maxValue, int num, double minGap=0.01)
        {
            float[] arrNum = new float[num];

            float tmp = 0;
            for (int i = 0; i <= num - 1; i++)
            {
                int maxRandomTimes = 1000;
                while (true)
                {
                    tmp = GetRandomFloat(minValue, maxValue);
                    if (IsRepeat(arrNum, tmp, minGap) == false)
                    {
                        arrNum[i] = tmp;
                        break;
                    }

                    maxRandomTimes--;

                    if (maxRandomTimes <=0)
                        break;
                    
                }
            }
            return arrNum;
        }

        // 获取最大最小值
        private static float GetRandomFloat(float minValue, float maxValue)
        {
        	//随机取数
            float result = Convert.ToSingle(ra.NextDouble() * (maxValue - minValue) + minValue);    
            return result;
        }

        // 是否重复
        private static bool IsRepeat(float[] arrNum, float tmp, double gap = 0.01)
        {
            bool bIsHave = false;
            for (int i = 0; i < arrNum.Length; i++)
            {
                if (System.Math.Abs(arrNum[i] - tmp) <= gap)
                    return true;
            }
            return bIsHave;
        }
    }
}

调用

    float[] point_y = Tools.randoms.RandomFloatGap(-15, 15, 20, 0.5);

     foreach (float temp in point_y)
     {
       System.Console.WriteLine(temp.ToString());
     }

C# 生成随机数数组_第1张图片

你可能感兴趣的:(C#)