java中生成不重復隨機數(據HashSet特性)


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);//隨意打印一下看看效果
        }

    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM