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