随机数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. }

搬瓦工香港 PCCW 机房已免费迁移升级至香港 CN2 GIA 机房

搬瓦工最新优惠码优惠码:BWH3HYATVBJW,节约6.58%,全场通用!搬瓦工关闭香港 PCCW 机房通知下面提炼一下邮件的关键信息,原文在最后面。香港 CN2 GIA 机房自从 2020 年上线以来,网络性能大幅提升,所有新订单都默认部署在香港 CN2 GIA 机房;目前可以免费迁移到香港 CN2 GIA 机房,在 KiwiVM 控制面板选择 HKHK_8 机房进行迁移即可,迁移会改变 IP...

wordpress简洁英文主题 wordpress简洁通用型高级外贸主题

wordpress简洁英文主题,wordpress简洁通用大气的网站风格设计 + 更适于欧美国外用户操作体验,完善的外贸企业建站功能模块 + 更好的移动设备特色模块支持,更高效实用的后台自定义设置 + 标准高效的代码程序功能结构,更利于Goolge等国际搜索引擎的SEO搜索优化和站点收录排名。点击进入:wordpress简洁通用型高级外贸主题主题价格:¥3980 特 惠 价:¥1280安装环境:运...

注册做什么96%可以干啥,常用的7个常用的国内国外域名注册服务商_云服务器可以干什么

日前,国内知名主机服务商阿里云与国外资深服务器面板Plesk强强联合,推出 阿里云域名注册与备案、服务器ECS购买与登录使用 前言云服务器(Elastic  只需要确定cpu内存与带宽基本上就可以了,对于新手用户来说,我们在购买阿里云服务申请服务器与域名许多云服务商的云服务器配置是弹性的 三周学会小程序第三讲:服务 不过这个国外服务器有点慢,可以考虑国内的ngrokcc。 ngrokcc...

java随机数为你推荐
手机游戏排行榜20152017手游排行榜前十名个性qq资料QQ个性资料arm开发板arm开发板是干什么用的,是用在什么领域方面的怎么升级ios6苹果IOS5怎么升级IOS6版本ejb开发EJB是啥玩意了mate8价格华为mate8市场价多少bluestackbluestacks安卓模拟器有什么用电子商务网站模板电子商务网站模板哪个好?电子商务网站模板免费建站怎么样?服务器连接异常服务器连接异常是怎么回事啊,怎么解决网站排名靠前全国B2B网站排名靠前的有哪些
广西虚拟主机 美国vps vps是什么意思 VPS之家 net主机 isatap 商家促销 php免费空间 镇江联通宽带 52测评网 howfile 服务器维护方案 四核服务器 国外视频网站有哪些 512mb 太原联通测速 浙江服务器 主机返佣 创速 杭州电信 更多