怎样用java产生一个指定范围而且不重复的随机数?
展开全部
首先,需要一个范围内的随机数,第二部判重,如果重复了就再次随机.
假设我们需要一个m到n的随机数..
需要用到random函数随机一个从0到1的数.然后再乘m到n的范围,再加m
double i = Math.random() * (m - n) + m ----> 生成随机数
判重..方法有很多种了..比如我们用一个Set来存放已经存在的..
Set<Double> set = new LinkedHashSet<>();
if (set.contains(i)) { 重复了,重新随机 }
else { 向set中添加: set.add(Double.valueOf(i)); }
2017年8月28日 21:37:44
假设我们需要一个m到n的随机数..
需要用到random函数随机一个从0到1的数.然后再乘m到n的范围,再加m
double i = Math.random() * (m - n) + m ----> 生成随机数
判重..方法有很多种了..比如我们用一个Set来存放已经存在的..
Set<Double> set = new LinkedHashSet<>();
if (set.contains(i)) { 重复了,重新随机 }
else { 向set中添加: set.add(Double.valueOf(i)); }
2017年8月28日 21:37:44
展开全部
加一个循环判断,重复就在产生
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2017-08-30
展开全部
生成下一个时,判断前面的是否存在,如果存在重新生成
~
~
~
~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
写了个比较简单易懂的方法,包含三个参数:生成几位数字,生成数字范围的最小值,最大值
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;i<max;i++){
range[i] = i + min;
}
// 从数字范围数组中随机取数字,取出后把范围数组中的数字删除
for(let i=0;i<digit;i++){
let 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;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询