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

UCloud:全球大促降价,云服务器全网最低价,1核1G快杰云服务器47元/年

ucloud:全球大促活动降价了!这次云服务器全网最低价,也算是让利用户了,UCloud商家调低了之前的促销活动价格,并且新增了1核1G内存配置快杰型云服务器,价格是47元/年(也可选2元首月),这是全网同配置最便宜的云服务器了!UCloud全球大促活动促销机型有快杰型云服务器和通用型云服务器,促销机房国内海外都有,覆盖全球20个城市,具体有北京、上海、广州、香港、 台北、日本东京、越南胡志明市、...

NameCheap 2021年新年首次活动 域名 域名邮局 SSL证书等

NameCheap商家如今发布促销活动也是有不小套路的,比如会在提前一周+的时间告诉你他们未来的活,比如这次2021年的首次活动就有在一周之前看到,但是这不等到他们中午一点左右的时候才有正式开始,而且我确实是有需要注册域名,等着看看是否有真的折扣,但是实际上.COM域名力度也就一般需要51元左右,其他地方也就55元左右。当然,这次新年的首次活动不管如何肯定是比平时便宜一点点的。有新注册域名、企业域...

Buyvm:VPS/块存储补货1Gbps不限流量/$2起/月

BuyVM测评,BuyVM怎么样?BuyVM好不好?BuyVM,2010年成立的国外老牌稳定商家,Frantech Solutions旗下,主要提供基于KVM的VPS服务器,数据中心有拉斯维加斯、纽约、卢森堡,付费可选强大的DDOS防护(月付3美金),特色是1Gbps不限流量,稳定商家,而且卢森堡不限版权。1G或以上内存可以安装Windows 2012 64bit,无需任何费用,所有型号包括免费的...

java随机数为你推荐
可以发外链的论坛发外链的论坛哪个比较好,哪个论坛能发外链,能发广告急求。。。。无线路由器限速设置无线路由器能设置限速吗?或者说那个牌子的能。童之磊华硕的四核平板电脑,怎么样?腾讯文章怎么在手机腾讯网发文章godaddy美国GODADDY 域名支持域名别名解析吗?vbscript教程vbs 学习方法以及 vbs 实例 有编程基础畅想中国未来的中国是什么样子的xp系统停止服务Windowsxp系统为什么停止服务cr2格式如何打开CR2格式的照片呢宽带接入服务器互联网的接入方式有哪几种?
godaddy域名注册 香港vps主机 美国主机推荐 免费ddos防火墙 免费全能空间 秒杀预告 佛山高防服务器 太原网通测速平台 天翼云盘 购买国外空间 阿里云官方网站 谷歌台湾 nic 内存 泥瓦工 主机配置 腾讯qq空间登录首页 联想塔式服务器 台式电脑主机推荐 北京公租房申请网站 更多