random不重复随机数,random不重复随机数c#
random 怎么实现随机数不重复方法 java
java中实现随机数不重复主要思想是使用hashset来保存每个生成的数据,因为set集合本身内部机制实现了不保存相同的数据,代码如下:
?/**
?*?随机指定范围内N个不重复的数
?*?利用HashSet的特征,只能存放不同的值
?*?@param?min?指定范围最小值
?*?@param?max?指定范围最大值
?*?@param?n?随机数个数
?*?@param?HashSetInteger?set?随机数结果集
?*/
????public?static?void?randomSet(int?min,?int?max,?int?n,?HashSetInteger?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);//?递归
????????}
????}
C# Random.Next()产生不重复随机数
获取随机数,苦恼重复问题;
在循环中,rd.Next()会由于默认的时间间隔太小而产生出重复随机数,解决方案有两种:
random的构造函数提到循环外,适用于方法内部使用
Random rd = new Random();
for(int i=0;i10;i++){
? ? int seed=rd.Next();
}
2.使用guid作为随机数种子,适用于高频次调用一个生成方法或过程
//外部多次调用
for(int i=0;i10;i++){
? GetRandom();
}
public int GetRandom(){
? ? Random rd = new Random(Guid.NewGuid().GetHashCode());
? ? return rd.Next();
}
java中如何用random函数产生不重复的随机数
废话不多说直接上代码!
import java.util.ArrayList;
import java.util.Random;
public class Test {
public static void main(String[] args) {
// 生成 [0-n) 个不重复的随机数
// list 用来保存这些随机数
ArrayList list = new ArrayList();
int n = 10;
Random rand = new Random();
boolean[] bool = new boolean[n];
int num = 0;
for (int i = 0; i n; i++) {
do {
// 如果产生的数相同继续循环
num = rand.nextInt(n);
} while (bool[num]);
bool[num] = true;
list.add(num);
}
System.out.println(list);
}
}
