假设我们需要一个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
java中实现随机数不重复主要思想是使用hashset来保存每个生成的数据,因为set集合本身内部机制实现了不保存相同的数据,代码如下:
/*** 随机指定范围内N个不重复的数
* 利用HashSet的特征,只能存放不同的值
* @param min 指定范围最小值
* @param max 指定范围最大值
* @param n 随机数个数
* @param HashSet<Integer> set 随机数结果集
*/
public static void randomSet(int min, int max, int n, HashSet<Integer> set) {
if (n > (max - min + 1) || max < min) {
return
}
for (int i = 0 i < n i++) {
// 调用Math.random()方法
int num = (int) (Math.random() * (max - min)) + min
set.add(num)// 将不同的数存入HashSet中
}
int setSize = set.size()
// 如果存入的数小于指定生成的个数,则调用递归再生成剩余个数的随机数,如此循环,直到达到指定大小
if (setSize < n) {
randomSet(min, max, n - setSize, set)// 递归
}
}