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

选择Vultr VPS主机不支持支付宝付款的解决方案

在刚才更新Vultr 新年福利文章的时候突然想到前几天有网友问到自己有在Vultr 注册账户的时候无法用支付宝付款的问题,当时有帮助他给予解决,这里正好顺带一并介绍整理出来。毕竟对于来说,虽然使用的服务器不多,但是至少是见过世面的,大大小小商家的一些特性特征还是比较清楚的。在这篇文章中,和大家分享如果我们有在Vultr新注册账户或者充值购买云服务器的时候,不支持支付宝付款的原因。毕竟我们是知道的,...

CUBECLOUD:香港服务器、洛杉矶服务器、全场88折,69元/月

CUBECLOUD(魔方云)成立于2016年,亚太互联网络信息中心(APNIC)会员,全线产品均为完全自营,专业数据灾备冗余,全部产品均为SSD阵列,精品网络CN2(GIA) CU(10099VIP)接入,与当今主流云计算解决方案保持同步,为企业以及开发者用户实现灵活弹性自动化的基础设施。【夏日特促】全场产品88折优惠码:Summer_2021时间:2021年8月1日 — 2021年8月8日香港C...

MechanicWeb免费DirectAdmin/异地备份

MechanicWeb怎么样?MechanicWeb好不好?MechanicWeb成立于2008年,目前在美国洛杉矶、凤凰城、达拉斯、迈阿密、北卡、纽约、英国、卢森堡、德国、加拿大、新加坡有11个数据中心,主营全托管型虚拟主机、VPS主机、半专用服务器和独立服务器业务。MechanicWeb只做高端的托管vps,这次MechanicWeb上新Xeon W-1290P处理器套餐,基准3.7GHz最高...

java随机数为你推荐
推广方法如何做推广?什么是电子邮件 什么是电子邮件彩信中心移动的彩信中心是?主页是?收不到彩信,怎么设置?开机滚动条电脑开机滚动条要走好几次bt封杀为什么现在网上许多BT下载都被封了?如何快速收录如何做到让百度快速收录网络广告投放网络广告投放有哪些技巧?gbk编码表GBK码表怎么查blogcnCK沉珂是个怎样的一个人?之后又是怎样的 ?网站推广外链网站推广发外链,外链内容怎么确定
域名批量查询 域名查询工具 腾讯云盘 softlayer rackspace 免备案空间 56折 美国php主机 淘宝双十一2018 万网主机 服务器硬件配置 乐视会员免费领取 国外免费网盘 新网dns web服务器有哪些 木马检测 挂马检测工具 西安电信测速网 冰盾ddos防火墙 免费论坛空间 更多