首页 > 代码库 > java 随机数不重复
java 随机数不重复
package test;
import java.util.HashSet;
import java.util.Random;
public class Snippet {
/**
* 随机指定范围内N个不重复的数
* 在初始化的无重复待选数组中随机产生一个数放入结果中,
* 将待选数组被随机到的数,用待选数组(len-1)下标对应的数替换
* 然后从len-2里随机产生下一个随机数,如此类推
* @param max 指定范围最大值
* @param min 指定范围最小值
* @param n 随机数个数
* @return int[] 随机数结果集
*/
public static int[] randomArray(int min,int max,int n){
int len = max-min+1;
if(max < min || n > len){
return null;
}
//初始化给定范围的待选数组
int[] source = new int[len];
for (int i = min; i < min+len; i++){
source[i-min] = i;
}
int[] result = new int[n];
Random rd = new Random();
int index = 0;
for (int i = 0; i < result.length; i++) {
//待选数组0到(len-2)随机一个下标
int s=rd.nextInt()%len;
// System.out.print(s-- +",");
index = Math.abs(rd.nextInt()%len--);
// System.out.println(index);
//将随机到的数放入结果集
result[i] = source[index];
//将待选数组中被随机到的数,用待选数组(len-1)下标对应的数替换
source[index] = source[len];
}
return result;
}
public static void main(String[] args) {
// int[] reult1 = randomCommon(20,50,10);
// for (int i : reult1) {
// System.out.println(i);
// }
int[] reult2 = randomArray(0,4,5);
for (int i : reult2) {
System.out.print(i);
}
// HashSet<Integer> set = new HashSet<Integer>();
// randomSet(20,50,10,set);
// for (int j : set) {
// System.out.println(j);
// }
}
}