码迷,mamicode.com
首页 > 编程语言 > 详细

java中生成不重复随机数(据HashSet特性)

时间:2017-07-14 22:13:05      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:size   turn   指定   import   hash   int   nbsp   随机数   不重复   

import java.util.HashSet;
public class RandomNumbers {


     /**
         * 随机指定范围内N个不重复的数 利用HashSet的特征,只能存放不同的值
         * 
         * @param min
         *            指定范围最小值
         * @param max
         *            指定范围最大值
         * @param n
         *            随机数个数
         * @param HashSet<Integer>
         *            set 随机数结果集
         */
        public static void randomSet(int min, int max, int n, HashSet<Integer> set) {
            if (n > (max - min + 1) || max < min) {
                return;
            }
            for (int i = 0; i < n; i++) {
                // 调用Math.random()方法
                int num = (int) (Math.random() * (max - min)) + min;
                set.add(num);// 将不同的数存入HashSet中
            }
            int setSize = set.size();
            // 如果存入的数小于指定生成的个数,则调用递归再生成剩余个数的随机数,如此循环,直到达到指定大小
            if (setSize < n) {
                /**
                 * 下面这一行为什么被注释掉了,说实话万能的度娘到处都是这段代码
                 * 但是如果那样的话并不一定能确定生成对应的数值
                 * 大佬们还是先仔细看一下,n-setSize只是剩下没有生成的数量,如果下次还没生成不同的数值那还怎么玩
                 */
                randomSet(min, max, n - setSize, set);// 递归  
//                randomSet(min, max, n, set);// 递归
            }
        }
        
        public static void main(String[] args) {
            /**
             * 那就这样吧,根据你的需求去生成最合适的数值
             * 示例默认生成4位的随机数,从0到999当然不算了,所以就是8999位喽
             * 不过生成数量可别超过你给的范围,jvm会炸的
             */
            int max = 5;//随机数范围的最大值
            int min = 1;//随机数范围的最小值
            int n = 4;//生成数量
            HashSet<Integer> numbers = new HashSet<Integer>();
            randomSet(min,max,n,numbers);
            System.out.println(numbers);//随意打印一下看看效果
        }

    }

 

java中生成不重复随机数(据HashSet特性)

标签:size   turn   指定   import   hash   int   nbsp   随机数   不重复   

原文地址:http://www.cnblogs.com/mingliao/p/7172333.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!