随机数JAVA随机数之多种方法从给定范围内随机N个不重复数

java随机数  时间:2021-02-13  阅读:()

一、 JAVA中生成随机数的方式

1 、在j2se中使用Math.random()令系统随机选取一个0~1之间的double类型小数将其乘以一个数 比如25就能得到一个0~25范围内的随机数这个在j2me中没有J a va代码

1. int randomNumber = (int) Math.round(Math.random()*(max-min)+min) ;

2、在System类中有一个currentTimeMi l l is()方法这个方法返回从1970年1月1号0点0分0秒到目前的一个long型的毫秒数可作为一个随机数还可以将其对某些数取模就能限制随机数的范围此方式在循环中同时产生多个随机数时会是相同的值有一定的局限性

J a va代码

1. long randomNum = System.currentTimeMillis( );

2. int randomNumber = (int) randomNum%(max-min)+min;

3、使用java.uti l .Random类来产生一个随机数发生器这个也是我们在j2me的程序里经常用的一个取随机数的方法。它有两种形式的构造函数分别是Random()和

Random(long seed)。 Random()使用当前时间即System.currentTimeMi l l is()作为发生器的种子 Random(long seed)使用指定的seed作为发生器的种子。随机数发生器(Random)对象产生以后通过调用不同的method nextInt()、 nextLong()、 nextFloat()、 nextDouble()等获得不同类型随机数。如果两个Random对象使用相同的种子比如都是25 并且以相同的顺序调用相同的函数那它们返回值完全相同。

J a va代码

1. Random random = new Random( );

2. int randomNumber = random.nextInt(max)%(max-min+1) + min;

二、随机给定范围内N个不重复的数

1 、方法一最简单最易理解的两重循环去重

J a va代码

1. /**

2. *随机指定范围内N个不重复的数

3. *最简单最基本的方法

4. * @param min指定范围最小值

5. * @param max指定范围最大值

6. * @param n随机数个数

7. */

8. public static int[] randomCommon(int min, int max, int n){

9. if (n > (max - min + 1) | | max < min) {

10. return null;

11. }

12. int[] result = new int[n] ;

13. int count = 0;

14. while(count < n) {

15. int num = (int) (Math.random( ) * (max - min) ) + min;

16. boolean flag = true;

17. for (int j = 0; j < n; j++) {

18. if(num == result[j]){

19. flag = false;

20. brea k;

21. }

22. }

23. if(flag){

24. result[count] = num;

25. count++;

26. }

27. }

28. return result;

29. }

2、方法二利用HashSet的特征只能存放不同的值

J a va代码

1. /**

2. *随机指定范围内N个不重复的数

3. *利用HashSet的特征只能存放不同的值

4. * @param min指定范围最小值

5. * @param max指定范围最大值

6. * @param n随机数个数

7. * @param HashSet<Integer> set随机数结果集

8. */

9. public static void randomSet(int min, int max, int n, HashSet<Integer> set) {

10. if (n > (max - min + 1) | | max < min) {

11. ret u rn;

12. }

13. for (int i = 0; i < n; i++) {

14. //调用Math.random()方法

15. int num = (int) (Math.random( ) * (max - min) ) + min;

16. set.add(num);//将不同的数存入HashSet中

17. }

18. int setSize = set.size( );

19. //如果存入的数小于指定生成的个数则调用递归再生成剩余个数的随机数如此循环直到达到指定大小

20. if (setSize < n) {

21. randomSet(min, max, n - setSize, set) ;//递归

22. }

23. }

3、方法三排除已随机到的数

J a va代码

1. /**

2. *随机指定范围内N个不重复的数

3. *在初始化的无重复待选数组中随机产生一个数放入结果中

4. *将待选数组被随机到的数用待选数组(len-1)下标对应的数替换

5. *然后从len-2里随机产生下一个随机数如此类推

6. * @param max 指定范围最大值

7. * @param min 指定范围最小值

8. * @param n 随机数个数

9. * @return int[ ]随机数结果集

10. */

11. public static int[] randomArray(int min,int max,int n){

12. int len = max-min+1;

13.

14. if(max < min | | n > len){

15. return null;

16. }

17.

18. //初始化给定范围的待选数组

19. int[] source = new int[len];

20. for (int i = min; i < min+len; i++){

21. source[i-min] = i;

22. }

23.

24. int[] result = new int[n] ;

25. Random rd = new Random( );

26. int index = 0;

27. for (int i = 0; i < result.length; i++) {

28. //待选数组0到(len-2)随机一个下标

29. index = Math.abs(rd.nextInt( ) % len--) ;

30. //将随机到的数放入结果集

31. result[i] = source[index];

32. //将待选数组中被随机到的数用待选数组(len-1)下标对应的数替换

33. source[index] = source[len];

34. }

35. return result;

36. }

调用实例

J a va代码

1. public static void main(String[ ] args) {

2. int[] reult1 = randomCommon(20,50,10);

3. for (int i : reult1) {

4. System.out.println(i) ;

5. }

6.

7. int[] reult2 = randomArray(20,50,10) ;

8. for (int i : reult2) {

9. System.out.println(i) ;

10. }

11.

12. HashSet<Integer> set = new HashSet<Integer>() ;

13. randomSet(20,50,10,set) ;

14. for (int j : set) {

15. System.out.println(j) ;

16. }

17. }

蓝速数据(58/年)秒杀服务器独立1核2G 1M

蓝速数据金秋上云季2G58/年怎么样?蓝速数据物理机拼团0元购劲爆?蓝速数据服务器秒杀爆产品好不好?蓝速数据是广州五联科技信息有限公司旗下品牌云计算平台、采用国内首选Zkeys公有云建设多种开通方式、具有IDC、ISP从业资格证IDC运营商新老用户值得信赖的商家。我司主要从事内地的枣庄、宿迁、深圳、绍兴、成都(市、县)。待开放地区:北京、广州、十堰、西安、镇江(市、县)。等地区数据中心业务,均KV...

wordpress外贸企业主题 wordpress经典外贸企业建站主题

WordPress经典外贸企业建站主题,经典配色扁平化简约设计+跨屏自适应移动端设备,特色外贸企业建站功能模块+在线Inquiry询单功能,更有利于Google等英文搜索优化和站点收录。采用标准的HTML5+CSS3语言开发,兼容当下的各种主流浏览器: IE 6+(以及类似360、遨游等基于IE内核的)、Firefox、Google Chrome、Safari、Opera等;同时支持移动终端的常用...

青云互联:洛杉矶CN2弹性云限时七折,Cera机房三网CN2gia回程,13.3元/月起

青云互联怎么样?青云互联是一家成立于2020年6月份的主机服务商,致力于为用户提供高性价比稳定快速的主机托管服务,目前提供有美国免费主机、香港主机、香港服务器、美国云服务器,让您的网站高速、稳定运行。目前,美国洛杉矶cn2弹性云限时七折,美国cera机房三网CN2gia回程 13.3元/月起,可选Windows/可自定义配置。点击进入:青云互联官网青云互联优惠码:七折优惠码:dVRKp2tP (续...

java随机数为你推荐
fontfamily这是什么字体,求解.. font-family: PahuengaCassRegular;赛我网赛我网的号自己能封吗?可以发外链的论坛发外链的论坛哪个比较好,哪个论坛能发外链,能发广告急求。。。。会声会影12下载谁有免费的会声会影12的素材下载地址给俺发个!要没有毒的,谢谢咧!暴风影音怎么截图暴风影音怎么截屏啊?云播怎么看片云播看不了视频免费开通黄钻能免费开通黄钻吗??网站运营网络运营具体做什么呢正则表达式javajava正则表达式ps抠图技巧如何使用PS抠图
域名备案网站 国内免备案主机 百度云100as suspended 150邮箱 我爱水煮鱼 空间论坛 gspeed 最好的免费空间 hkg 免费申请网站 美国免费空间 申请免费空间和域名 无限流量 web应用服务器 网页加速 中国联通宽带测速 国外网页代理 江苏双线 广州主机托管 更多