import java.util.HashSet;
public class RandomNumbers {
/**
* 随机指定范围内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) {
/**
* 下面这一行为什么被注释掉了,说实话万能的度娘到处都是这段代码
* 但是如果那样的话并不一定能确定生成对应的数值
* 大佬们还是先仔细看一下,n-setSize只是剩下没有生成的数量,如果下次还没生成不同的数值那还怎么玩
*/
randomSet(min, max, n - setSize, set);// 递归
// randomSet(min, max, n, set);// 递归
}
}
public static void main(String[] args) {
/**
* 那就这样吧,根据你的需求去生成最合适的数值
* 示例默认生成4位的随机数,从0到999当然不算了,所以就是8999位喽
* 不过生成数量可别超过你给的范围,jvm会炸的
*/
int max = 5;//随机数范围的最大值
int min = 1;//随机数范围的最小值
int n = 4;//生成数量
HashSet<Integer> numbers = new HashSet<Integer>();
randomSet(min,max,n,numbers);
System.out.println(numbers);//随意打印一下看看效果
}
}