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

稳爱云(26元),香港云服务器 1核 1G 10M带宽

稳爱云(www.wenaiyun.com)是创建于2021年的国人IDC商家,主要目前要出售香港VPS、香港独立服务器、美国高防VPS、美国CERA VPS 等目前在售VPS线路有三网CN2、CN2 GIA,该公司旗下产品均采用KVM虚拟化架构。机房采用业内口碑最好香港沙田机房,稳定,好用,数据安全。线路采用三网(电信,联通,移动)回程电信cn2、cn2 gia优质网络,延迟低,速度快。自行封装的...

Megalayer(月599元)限时8月香港和美国大带宽服务器

第一、香港服务器机房这里我们可以看到有提供四个大带宽方案,是全向带宽和国际带宽,前者适合除了中国大陆地区的全网地区用户可以用,后者国际带宽适合欧美地区业务。如果我们是需要大陆地区速度CN2优化的,那就需要选择常规的优化带宽方案,参考这里。CPU内存硬盘带宽流量价格选择E3-12308GB240GB SSD50M全向带宽不限999元/月方案选择E3-12308GB240GB SSD100M国际带宽不...

VPS云服务器GT线路,KVM虚vps消息CloudCone美国洛杉矶便宜年付VPS云服务器补货14美元/年

近日CloudCone发布了最新的补货消息,针对此前新年闪购年付便宜VPS云服务器计划方案进行了少量补货,KVM虚拟架构,美国洛杉矶CN2 GT线路,1Gbps带宽,最低3TB流量,仅需14美元/年,有需要国外便宜美国洛杉矶VPS云服务器的朋友可以尝试一下。CloudCone怎么样?CloudCone服务器好不好?CloudCone值不值得购买?CloudCone是一家成立于2017年的美国服务器...

java随机数为你推荐
中国论坛大全安徽论坛都有哪些?手机区号手机号码前怎样填写正确的国内区号?不兼容安卓手机软件不兼容怎么办?iphone6上市时间苹果六什么时候出的系统分析员系统分析师是做什么 的网管工具做技术网管需要哪些工具?具体做些什么?网管工具网吧工具有什么?怎么上传音乐怎样可以上传本地音乐到网上?freebsd安装FreeBSD怎么安装去鼠标加速度请教如何正确的去处鼠标加速度~
青岛虚拟主机 美国服务器租用 骨干网 冰山互联 virpus sugarsync 彩虹ip 魔兽世界台湾服务器 河南服务器 java虚拟主机 骨干网络 699美元 可外链相册 ftp免费空间 vip域名 如何建立邮箱 超级服务器 华为云服务登录 美国凤凰城 阿里云邮箱个人版 更多