本文实例讲述了Java编程实现从给定范围内随机N个不重复数生成随机数的方法。分享给大家供大家参考,具体如下:
<强>一、JAVA中生成随机数的方式强>
1,在j2se中使用math . random()令系统随机选取一个0 ~ 1之间的两类型小数,将其乘以一个数,比如25日就能得到一个0 ~ 25范围内的随机数,这个在j2me中没有;
int randomNumber=(int) Math.round (math . random() *(极大极小)+分钟); >之前2,在系统类中有一个currentTimeMillis()方法,这个方法返回从1970年1月1号0点0分0秒到目前的一个长型的毫秒数,可作为一个随机数,还可以将其对某些数取模,就能限制随机数的范围,此方式在循环中同时产生多个随机数时,会是相同的值,有一定的局限性!
长randomNum=System.currentTimeMillis (); int randomNumber=(int) randomNum %(极大极小)+分钟; >之前3,使用java.util.Random类来产生一个随机数发生器,这个也是我们在j2me的程序里经常用的一个取随机数的方法。它有两种形式的构造函数,分别是随机的()和随机(长种子).Random()使用当前时间即System.currentTimeMillis()作为发生器的种子,随机种子(长)使用指定的种子作为发生器的种子。随机数发生器(随机)对象产生以后,通过调用不同的方法:nextInt (), nextLong (), nextFloat (), nextDouble()等获得不同类型随机数。如果两个随机的对象使用相同的种子(比如都是25),并且以相同的顺序调用相同的函数,那它们返回值完全相同。
随机随机=new随机(); int randomNumber=random.nextInt (max) %(极大极小+ 1)+分钟; >之前<强>二,随机给定范围内N个不重复的数强>
1,方法一:最简单最易理解的两重循环去重
/* * *随机指定范围内N个不重复的数 *最简单最基本的方法 * @param敏指定范围最小值 * @param马克斯指定范围最大值 * @param n随机数个数 */公共静态int [] randomCommon (int, int马克斯,int n) { 如果(n比;(最大值-最小值+ 1)| |马克斯& lt;min) { 返回null; } int[]结果=new int [n]; int数=0; 而(计数& lt;n) { int num=(int) (math . random() *(最大值-最小值))+分钟; 布尔标志=true; for (int j=0;j & lt;n;j + +) { 如果(num==结果[j]) { 国旗=false; 打破; } } 如果(国旗){ 结果[数]=num; 数+ +; } } 返回结果; } >之前2,方法二:利用HashSet的特征,只能存放不同的值
/* * *随机指定范围内N个不重复的数 *利用HashSet的特征,只能存放不同的值 * @param敏指定范围最小值 * @param马克斯指定范围最大值 * @param n随机数个数 * @param HashSet设置随机数结果集 */公共静态孔隙randomSet (int, int马克斯,int n, HashSet 集){ 如果(n比;(最大值-最小值+ 1)| |马克斯& lt;min) { 返回: } for (int i=0;我& lt;n;我+ +){//调用math . random()方法 int num=(int) (math . random() *(最大值-最小值))+分钟; set.add (num);//将不同的数存入HashSet中 } int setSize=set.size ();//如果存入的数小于指定生成的个数,则调用递归再生成剩余个数的随机数,如此循环,直到达到指定大小 如果(setSize & lt;n) { randomSet(最小,最大,n - setSize集);//递归 } } >之前 3,方法三:排除已随机到的数
/* * *随机指定范围内N个不重复的数 *在初始化的无重复待选数组中随机产生一个数放入结果中, *将待选数组被随机到的数,用待选数组(len-1)下标对应的数替换 *然后从len-2里随机产生下一个随机数,如此类推 * @param马克斯指定范围最大值 * @param敏指定范围最小值 * @param n随机数个数 * @return int[]随机数结果集 */公共静态int [] randomArray (int, int马克斯,int n) { int len=不等式+ 1; 如果(max & lt;分钟| | n比;len) { 返回null; }//初始化给定范围的待选数组 int []=new int (len)来源; for (int i=最小;我& lt;分钟+兰;我+ +){ i - min)源(=我; } int[]结果=new int [n]; 随机采访=new随机(); int指数=0; for (int i=0;我& lt;result.length;我+ +){//待选数组0到(len-2)随机一个下标 指数=Math.abs (rd.nextInt () % len——);//将随机到的数放入结果集 结果[我]=源(指数);//将待选数组中被随机到的数,用待选数组(len-1)下标对应的数替换 源(指数)=源(len); } 返回结果; }Java编程实现从给定范围内随机N个不重复数生成随机数的方法小结