JS 生成一组不重复的随机数
2013-12-17 15:34
330 查看
随机产生一组介于指定范围的不重复的随机数。
1.主要实现
/// <summary>
/// 生成一个指定范围的随机数
/// </summary>
/// <param name="start">起始值</param>
/// <param name="end">终止值</param>
function newNumber(start,end){
return Math.round(Math.random()*(end-start)+start);//生成在[start,end]范围内的随机数值,只支持不小于0的合法范围
}
/// <summary>
/// 目标数字是否已经存在于现有数字集合中
/// </summary>
/// <param name="para">现有数字集合</param>
/// <param name="num">目标数字</param>
function isHaveThisNumber(para,num){
//拒绝无效的数组
if(typeof(para) == "object")
{
if(para.length==0)
{
NGLogger.Info("数组为空");
return false;
}
}
for(var i=0;i<para.length;i++){
if(para[i]==num){
NGLogger.Info("与第【"+(i+1)+"】个元素重复,正在重新生成...");
return true;//与目标数组有重复
}
}
return false;
}
/// <summary>
/// 生成一个不重复的随机数数组
/// </summary>
/// <param name="start">起始值</param>
/// <param name="end">终止值</param>
/// <param name="size">随机数大小</param>
function newRandomNumbersWithNoRepeat(start,end,size){
var para=new Array();//目标随机数组
var rnum;//当前随机数
var currentIndex=0;//当前随机数组的索引
if(start>end||start<0||end<0||size<0){
NGLogger.Info("无效参数");
return;
}
if(end-start+1<size){//验证随机数个数是否超出随机数范围
NGLogger.Info("随机数范围大于随机区间");
return;
}
for(var i=0;i<size;i++){//生成 size 个不重复的随机数
rnum=newNumber(start,end);//获取随机数
if(isHaveThisNumber(para,rnum)){//是否已经存在
while(isHaveThisNumber(para,rnum)){//获取新的随机数 直到不重复
rnum=newNumber(start,end);//重新获取随机数
NGLogger.Info("发现新的随机数:"+rnum);
}
}
para[currentIndex++]=rnum;//添加到现有数字集合中
}
return para;
}
2.测试一下:
function AppMain(){
var para=newRandomNumbersWithNoRepeat(1,2000,1000);//生成1到2000范围内
NGLogger.Info("已经生成"+para.length+"个随机数。\n随机序列为:"+para.toString());
}
3.运行结果:
1.主要实现
/// <summary>
/// 生成一个指定范围的随机数
/// </summary>
/// <param name="start">起始值</param>
/// <param name="end">终止值</param>
function newNumber(start,end){
return Math.round(Math.random()*(end-start)+start);//生成在[start,end]范围内的随机数值,只支持不小于0的合法范围
}
/// <summary>
/// 目标数字是否已经存在于现有数字集合中
/// </summary>
/// <param name="para">现有数字集合</param>
/// <param name="num">目标数字</param>
function isHaveThisNumber(para,num){
//拒绝无效的数组
if(typeof(para) == "object")
{
if(para.length==0)
{
NGLogger.Info("数组为空");
return false;
}
}
for(var i=0;i<para.length;i++){
if(para[i]==num){
NGLogger.Info("与第【"+(i+1)+"】个元素重复,正在重新生成...");
return true;//与目标数组有重复
}
}
return false;
}
/// <summary>
/// 生成一个不重复的随机数数组
/// </summary>
/// <param name="start">起始值</param>
/// <param name="end">终止值</param>
/// <param name="size">随机数大小</param>
function newRandomNumbersWithNoRepeat(start,end,size){
var para=new Array();//目标随机数组
var rnum;//当前随机数
var currentIndex=0;//当前随机数组的索引
if(start>end||start<0||end<0||size<0){
NGLogger.Info("无效参数");
return;
}
if(end-start+1<size){//验证随机数个数是否超出随机数范围
NGLogger.Info("随机数范围大于随机区间");
return;
}
for(var i=0;i<size;i++){//生成 size 个不重复的随机数
rnum=newNumber(start,end);//获取随机数
if(isHaveThisNumber(para,rnum)){//是否已经存在
while(isHaveThisNumber(para,rnum)){//获取新的随机数 直到不重复
rnum=newNumber(start,end);//重新获取随机数
NGLogger.Info("发现新的随机数:"+rnum);
}
}
para[currentIndex++]=rnum;//添加到现有数字集合中
}
return para;
}
2.测试一下:
function AppMain(){
var para=newRandomNumbersWithNoRepeat(1,2000,1000);//生成1到2000范围内
NGLogger.Info("已经生成"+para.length+"个随机数。\n随机序列为:"+para.toString());
}
3.运行结果:
相关文章推荐
- JS 生成一组不重复的随机数
- js获取一组不重复的随机数的方法
- 随机数生成不重复的一组数(类似于抓阄)
- js生成 1-100 不重复随机数
- 利用HashSet生成一组不重复的随机数
- 生成一组不重复随机数
- [js][技巧]生成指定范围指定个数的不重复随机数
- js随机数1到10生成不重复的
- java 生成一组不重复的随机数
- 返回一组不重复随机数生成方法-(完美,100%不重复)
- scala随机数生成,生成一组不重复随机数算法
- JS生成不重复随机数
- C/C++: 生成不重复的一组随机数
- java 生成一组不同的随机数(不重复)
- java中生成无重复随机数的2种方法
- java生成不重复的随机数
- js生成随机数(数字+字母)
- JS随机生成不重复数据的代码分享
- JS如何用Math.random()来生成指定范围内的随机数?
- T-SQL生成X个不重复的Y位长度的随机数