首先,需要一个范围内的随机数,第二部判重,如果重复了就再次随机.
假设我们需要一个m到n的随机数..
需要用到random函数随机一个从0到1的数.然后再乘m到n的范围,再加m
double i = Math.random() * (m - n) + m ----> 生成随机数
判重..方法有很多种了..比如我们用一个Set来存放已经存在的..
Set
if (set.contains(i)) { 重复了,重新随机 }
else { 向set中添加: set.add(Double.valueOf(i)); }
2017年8月28日 21:37:44
加一个循环判断,重复就在产生
生成下一个时,判断前面的是否存在,如果存在重新生成
~
~
写了个比较简单易懂的方法,包含三个参数:生成几位数字,生成数字范围的最小值,最大值
typeScript代码,主要看思路就好
/**
* 生成不重复的digit位数字,最小值min,最大值max
*/
codeEasyInit(digit:number,min:number,max:number): number[]{
// 判断位数是否超过最大值和最小值的差+1
if(max - min + 1 >= digit){
let range:number[] = [];
let result = [];
// 生成数字的范围
for(let i=0;irange[i] = i + min;
}
// 从数字范围数组中随机取数字,取出后把范围数组中的数字删除
for(let i=0;ilet numIndex = Math.floor(Math.random()*(range.length-1));
let numValue = range[numIndex];
result[i] = numValue;
range.splice(numIndex,1);
}
console.log(`init simple code: ${result}`);
return result;
} else {
console.log(`The number of digits is too large to be generated`);
return null;
}
}