Java编程实现从给定范围内随机N个不重复数生成随机数的方法小结

  

本文实例讲述了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个不重复数生成随机数的方法小结