网上找了一个,执行时老提示:堆栈溢出!代码如下: /// <summary>
/// 随机区取区段内的一级随机数
/// </summary>
/// <param name="num"></param>
/// <param name="minValue"></param>
/// <param name="maxValue"></param>
/// <returns></returns>
public static int[] GetRandomNum(int num,int minValue,int maxValue){
Random ra=new Random(unchecked((int)DateTime.Now.Ticks)); int[] arrNum=new int[num]; int tmp=0; for (int i=0;i<=num-1;i++){ tmp=ra.Next(minValue,maxValue); arrNum[i]=GetNum(arrNum,tmp,minValue,maxValue,ra);
} return arrNum;
} /// <summary>
/// 配合上一个函数使用
/// </summary>
/// <param name="arrNum"></param>
/// <param name="tmp"></param>
/// <param name="minValue"></param>
/// <param name="maxValue"></param>
/// <param name="ra"></param>
/// <returns></returns>
public static int GetNum(int[] arrNum,int tmp,int minValue,int maxValue,Random ra){ int n=0; while (n<=arrNum.Length-1) { if (arrNum[n]==tmp) { tmp=ra.Next(minValue,maxValue); GetNum(arrNum,tmp,minValue,maxValue,ra); } n++;
} return tmp; }
/// 随机区取区段内的一级随机数
/// </summary>
/// <param name="num"></param>
/// <param name="minValue"></param>
/// <param name="maxValue"></param>
/// <returns></returns>
public static int[] GetRandomNum(int num,int minValue,int maxValue){
Random ra=new Random(unchecked((int)DateTime.Now.Ticks)); int[] arrNum=new int[num]; int tmp=0; for (int i=0;i<=num-1;i++){ tmp=ra.Next(minValue,maxValue); arrNum[i]=GetNum(arrNum,tmp,minValue,maxValue,ra);
} return arrNum;
} /// <summary>
/// 配合上一个函数使用
/// </summary>
/// <param name="arrNum"></param>
/// <param name="tmp"></param>
/// <param name="minValue"></param>
/// <param name="maxValue"></param>
/// <param name="ra"></param>
/// <returns></returns>
public static int GetNum(int[] arrNum,int tmp,int minValue,int maxValue,Random ra){ int n=0; while (n<=arrNum.Length-1) { if (arrNum[n]==tmp) { tmp=ra.Next(minValue,maxValue); GetNum(arrNum,tmp,minValue,maxValue,ra); } n++;
} return tmp; }
解决方案 »
- 紧急!!!求查询语句问题!!!!
- 求助字符串比较问题
- 求用C#编写的Activex的视频或者书籍
- 多个dropdownlist(10个以上),如何提高页面打开速度!
- 两台服务器上的数据库表的关联问题
- 请问别人通过java调用web service,传送一个压缩文件,我用request.inputstream读出并且保存,但是好像文件比原来的大一些而且解压出问题,是不是java编码的问题
- 如何在DataGrid中只显示数据库中的5-10行记录?
- 读取文件问题
- 求助!!本人想写一个类似于QQ的局域网语音聊天程序,不知道怎么传语音信息!!
- 能不能在子线程中实时获得主线程中的对象数据呀?
- 稍稍理解了委托,但是对于事件还是一团浆糊
- 关于线程的迷惑,请指教
public static int[] RandomNumbers(int num, int minValue, int maxValue)
{
if (num <= 0) return null;
if (maxValue < minValue)
minValue = maxValue | (maxValue = minValue) & 0;
if (num > maxValue - minValue + 1) return null; // 取的个数多余范围就算了
List<int> vValues = new List<int>();
for(int i = minValue; i <= maxValue; i++)
vValues.Add(i);
int[] Result = new int[num];
Random vRandom = new Random();
for (int i = 0; i < num; i++)
{
int j = vRandom.Next(vValues.Count);
Result[i] = vValues[j];
vValues.RemoveAt(j);
}
return Result;
}
由于随机种子和当前时间有关系,如果你获取的数组操作很频繁
就容易出现重复的情况,这个时候可以把随机变量放到外面,初始化一次即可
private static Random vRandom = new Random();
/// 在一个整数区间内产生一组不重复的随机数
/// </summary>
/// <param name="num">产生的随机数个数</param>
/// <param name="minValue"></param>
/// <param name="maxValue"></param>
/// <returns></returns>
public static int[] RandomNumbers(int num, int minValue, int maxValue) { if (num <= 0) return null;
if (maxValue < minValue)
minValue = maxValue | (maxValue = minValue) & 0;
if (num > maxValue - minValue + 1) return null; // 取的个数多余范围就算了 ArrayList vValues = new ArrayList();
for(int i = minValue; i <= maxValue; i++){
vValues.Add(i);
} int[] Result = new int[num];
Random vRandom = new Random(); for (int i = 0; i < num; i++) {
int j = vRandom.Next(vValues.Count);
Result[i] = Int32.Parse(vValues[j].ToString());
vValues.RemoveAt(j);
} return Result;
}