大哥:
用c#实现,随机产生0--9之间的数字,每次产生一位数字,但要求这个数字每次全不一样???
比如,点一下按钮产生 9,再点一下产生 2,总之下一次的和上一次不能一样,请问怎么做??????比如这次产生了 22这个数字,下一次就不能产生22,狂求大哥,我们在做一个抽奖程序!
用c#实现,随机产生0--9之间的数字,每次产生一位数字,但要求这个数字每次全不一样???
比如,点一下按钮产生 9,再点一下产生 2,总之下一次的和上一次不能一样,请问怎么做??????比如这次产生了 22这个数字,下一次就不能产生22,狂求大哥,我们在做一个抽奖程序!
解决方案 »
- javascript页面跳转 session丢失的问题
- 这是怎么回事
- SqlDataSource+GridView怎样实现多表查询的输出
- 关于Ajax.dll的问题求助
- 建一个这样的网站,大家看看大概多少钱?!!!
- VS.NET2005为什么没有Default.Designer.cs文件
- 我要学asp了,介绍一些好的资料把!谢谢!
- 50分求一个音乐在线连续播放的例子(在前台选择播放的音乐,生成播放列表)
- 多线程的问题:我有一个也面,访问量特别大,我想......
- 很菜的问题,关于绘制图形的
- 请问一个服务器控件button,触发了onclick脚本事件后,不在触发服务器段事件。
- 救命,全部的分送上了!!给小妹一个有水晶报表打印的源码吧!!!!大家可能觉得简单,但我觉得好难。。。55555555
using System.Data;
using System.Collections;
using System.Data.SqlClient;
using Microsoft.DVAP.CommonFunction.CommonUtil;namespace PrizeOperate
{
/// <summary>
/// 随机数生成器
/// </summary>
public class RndCreator
{
//错误信息
public string strErr = ""; /// <summary>
/// 得到一个范围内的随机数字
/// </summary>
/// <param name="iLowNum">随机生成的上限值</param>
/// <param name="iHighNum">随机生成数字的下限值</param>
/// <returns></returns>
public int GetRndSingleNum(int iLowNum,int iHighNum)
{
if ((iLowNum<0)||(iHighNum<0))
{
strErr = "上限或下限的值不能 小于 零!";
return -1;
} if (iLowNum > iHighNum)
{
strErr = "上限值 不能小于 下限值!";
return -2;
} int iRndNum;
Random rnd = new Random((iHighNum-iLowNum+1) * unchecked((int)DateTime.Now.Ticks));
//返回的数值为: 一个大于或等于 iLowNum 且小于 iHighNum 的 32 位带符号整数;所以要iHighNum加1
iRndNum = rnd.Next(iLowNum,(iHighNum+1));
return iRndNum;
}
/// <summary>
/// 得到一组不同的随机数字
/// </summary>
/// <param name="iCount">要随机产生数字的个数</param>
/// <param name="iLowNum">每个数字的上限值</param>
/// <param name="iHighNum">每个数字的下限值</param>
/// <returns></returns>
public int[] GetRndArrayNum(int iCount,int iLowNum,int iHighNum)
{
int iRndNum;
int[] iRndArrayNum; if ((iLowNum<0)||(iHighNum<0))
{
strErr = "上限或下限的值不能 小于 零!";
return null;
} if (iLowNum > iHighNum)
{
strErr = "上限值 不能小于 下限值!";
return null;
} if (iCount <=0 )
{
strErr = "随机产生的数量不能 小于或等于 零!";
return null;
}
iRndArrayNum = new Int32[iCount];
for (int i=0;i<iCount;i++)
{
try
{
iRndNum = GetRndSingleNum(iLowNum,iHighNum);
//如果随机产生的数字重复,再产生随机数字,直到不重复为止
while(ifRepeate(iRndNum,iRndArrayNum)==1)
{
iRndNum = GetRndSingleNum(iLowNum,iHighNum);
}
iRndArrayNum[i] = iRndNum;
}
catch(Exception e)
{
strErr = e.Message;
throw;
}
}
return iRndArrayNum;
} //判断在数组中是否有重复的数字.0:没有重复;1:有重复;-1:出错
private int ifRepeate(int iNum,int[] iArrayNum)
{
int bRes = 0; if (iArrayNum.GetLength(0)<=0)
{
bRes = -1;
return bRes;
}
for (int i=0;i<iArrayNum.GetLength(0)-1;i++)
{
if (iNum == iArrayNum[i])
{
bRes = 1;
return bRes;
}
}
return bRes;
} /// <summary>
/// 得到任意位数的随机字符数字,每一字符位数字在规定的上限值和下限值范围内.
/// </summary>
/// <param name="iSize">随机数字的位数</param>
/// <param name="iLowNum">每个数字位的上限值</param>
/// <param name="iHighNum">每个数字位的下限值</param>
/// <returns></returns>
public string GetRndStr(int iSize,int iLowNum,int iHighNum)
{
string RndStr=""; int iFirst = 0;
int[] rtArray = new Int32[iSize]; Random rf = new Random((iHighNum-iLowNum+1) * unchecked((int)DateTime.Now.Ticks));
iFirst = rf.Next(iLowNum,iHighNum+1);
rtArray[0]=iFirst; //得到第一位
RndStr += rtArray[0].ToString();
for(int i=1;i<iSize;i++)
{
//每次给不同的种子值,避免每次数字重复
Random rdm = new Random(i * iFirst * unchecked((int)DateTime.Now.Ticks));
//返回的数值为: 一个大于或等于 iLowNum 且小于 iHighNum 的 32 位带符号整数;所以要iHighNum加1
rtArray[i] = rdm.Next(iLowNum,iHighNum+1);
iFirst = rtArray[i];
RndStr += rtArray[i].ToString();
}
return RndStr;
}
/// <summary>
/// 得到一组任意指定位数的随机字符数字
/// </summary>
/// <param name="iCount">要随机产生的各数</param>
/// <param name="iSize">每随机数字的位数</param>
/// <param name="iLowNum">每个数字位的上限值</param>
/// <param name="iHighNum">每个数字位的下限值</param>
/// <returns>返回一组随机数字数组</returns>
public string[] GetRndArrayStr(int iCount,int iSize,int iLowNum,int iHighNum)
{
string[] strRndArrayNum;
string strRndNum; if ((iLowNum<0)||(iHighNum<0))
{
strErr = "上限或下限的值不能 小于 零!";
return null;
} if (iLowNum < iHighNum)
{
strErr = "上限值 不能小于 下限值!";
return null;
} if (iSize <=0 )
{
strErr = "每个随机数字的位数字不能 小于 零!";
return null;
} if (iCount <=0 )
{
strErr = "随机产生的数量不能 小于或等于 零!";
return null;
} strRndArrayNum = new string[iCount];
for (int i=0;i<iCount;i++)
{
try
{
strRndNum = GetRndStr(iSize,iLowNum,iHighNum); //如果随机产生的数字重复,再产生随机数字,直到不重复为止
while(ifStrRepeate(strRndNum,strRndArrayNum)==1)
{
strRndNum = GetRndStr(iSize,iLowNum,iHighNum);
}
strRndArrayNum[i] = strRndNum;
}
catch(Exception e)
{
strErr = e.Message;
throw;
}
}
return strRndArrayNum;
} //判断在数组中是否有重复的数字.0:没有重复;1:有重复;-1:出错
private int ifStrRepeate(string strNum,string[] strRndArrayNum)
{
int bRes = 0; if (strRndArrayNum.GetLength(0)<=0)
{
bRes = -1;
return bRes;
}
for (int i=0;i<strRndArrayNum.GetLength(0)-1;i++)
{
if (strNum == strRndArrayNum[i])
{
bRes = 1;
return bRes;
}
}
return bRes;
} }
}
int codeCount = 7; //彩票位数
string randomCode = "";
int temp = -1;
Random rand = new Random();
for(int i=0;i<codeCount;i++)
{
int j = rand.Next(codeCount); //从 allChar 字符中随机取数字
if(randomCode.IndexOf(j.ToString()) != -1 )
{
i = i - 1;
continue;
}
temp = j;
randomCode += j.ToString();
}
return randomCode;
//test
btclick(object sender, System.EventArgs e)
{
Random rand = new Random();
int i = rand.Next(10);
ViewState["temp"] = i;
if(ViewState["temp"] != null)
int j = Convert.ToInt32(ViewState["temp"].ToString());
while (i == j)
{
i = rand.Next(10);
ViewState["temp"] = i;
}
Console.Write(ViewState["temp"].ToString());
}