java生成不重複的隨機數【某個範圍0-10】或者【某個陣列int[1,3,56,14,26,22,17]】
【java】廢話不多說直接貼程式碼:
/** * 隨機指定範圍內N個不重複的數 * 最簡單最基本的方法 * @param min 指定範圍最小值 * @param max 指定範圍最大值 * @param n 隨機數個數 */ public static int[] randomCommon(int min, int max, int n){ if (n > (max - min + 1) || max < min) { return null; } int[] result = new int[n]; int count = 0; while(count < n) { int num = (int) (Math.random() * (max - min)) + min; boolean flag = true; for (int j = 0; j < n; j++) { if(num == result[j]){ flag = false; break; } } if(flag){ result[count] = num; count++; } } return result; } /** * 隨機指定範圍內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) { randomSet(min, max, n - setSize, set);// 遞迴 } } /** * 隨機指定範圍內N個不重複的數 * 在初始化的無重複待選陣列中隨機產生一個數放入結果中, * 將待選陣列被隨機到的數,用待選陣列(len-1)下標對應的數替換 * 然後從len-2裡隨機產生下一個隨機數,如此類推 * @param max 指定範圍最大值 * @param min 指定範圍最小值 * @param n 隨機數個數 * @return int[] 隨機數結果集 */ public static int[] randomArray(int min,int max,int n){ int len = max-min+1; if(max < min || n > len){ return null; } //初始化給定範圍的待選陣列 int[] source = new int[len]; for (int i = min; i < min+len; i++){ source[i-min] = i; } int[] result = new int[n]; Random rd = new Random(); int index = 0; for (int i = 0; i < result.length; i++) { //待選陣列0到(len-2)隨機一個下標 index = Math.abs(rd.nextInt() % len--); //將隨機到的數放入結果集 result[i] = source[index]; //將待選陣列中被隨機到的數,用待選陣列(len-1)下標對應的數替換 source[index] = source[len]; } return result; } /** * 在一組不連續的陣列中隨機生成n個隨機數 * @param data 陣列 * @param n 隨機數個數 * @return int[] 隨機數結果集 */ public static int[] randomNoRepeat(int[] data1,int n){ int[] result = new int[n]; Random r = new Random(); int irdm = 0; for(int i = 0; i < n; i ++) { irdm = r.nextInt(11 - i); //[3, 5, 6, 8, 9, 15, 18, 24, 27, 30, 32] result[i] = data1[irdm]; if(i == (n-1)){ break; } for(int j = irdm; j < 11 - i - 1; j ++) { data1[j] = data1[j + 1]; } } return result; } public static void main(String[] args) { int[] reult1 = randomCommon(0,10,3); System.out.println("方式1:"); for (int i : reult1) { System.out.print(i + ","); } System.out.println(); System.out.println("方式2:"); int[] reult2 = randomArray(0,10,3); for (int i : reult2) { System.out.print(i + ","); } System.out.println(); System.out.println("方式3:"); HashSet<Integer> set = new HashSet<Integer>(); randomSet(0,10,3,set); for (int j : set) { System.out.print(j + ","); } System.out.println(); System.out.println("方式4:"); int[] data1 = {3, 5, 6, 8, 9, 15, 18, 24, 27, 30, 32}; int[] reult3 = randomNoRepeat(data1,3); for (int i : reult3) { System.out.print(i + ","); } }
執行後結果:
方式1:
7,1,5,
方式2:
9,0,4,
方式3:
4,6,8,
方式4:
32,30,27,
=====基礎很重要額==========
2015年3月27日 11:36:30
相關推薦
java生成不重複的隨機數【某個範圍0-10】或者【某個陣列int[1,3,56,14,26,22,17]】
【java】廢話不多說直接貼程式碼: /** * 隨機指定範圍內N個不重複的數 * 最簡單最基本的方法 * @param min 指定範圍最小值 * @param max 指定範圍最大值 * @param n 隨機數個數 */ public st
生成不重複隨機數序列(Java)
從1到n之間抽取出k個不重複的隨機數,用Math.random()實現的話,可參照下面的程式碼。 int r = (int) (Math.random() * n), 生成下標,據此下標,去到numbers數組裡拿到隨機數。然後將numbers[r]的值設定成
JAVA 生成不重複訂單號 優化版本 訂單號格式為yyyymmdd後面自增
@Service("orderNumberDubbboServiceImpl") public class OrderNumberDubbboServiceImpl implements OrderNumberDubbboService { private static Logger
生成不重複隨機數,自己寫的,嘿嘿
package 基礎演算法; import java.util.Arrays; public class radomNums { public static void main(String[] args){ int[] array=new int[8]; i
java生成不重複隨機賬號
/** * 生成隨機賬號 * @return */ public static String uuid() {
利用java生成不重複的ID
returnsb.append(str.charAt(pixOne)).append(str.charAt(pixTwo)).append(str.charAt(pixThree)).append(str.charAt(pixFour)).toString();
mysql生成不重複隨機數(unique number generation)
問題來源 業務中有時會遇到要生成不重複隨機數的情況,例如,新生成一個商品編號、房間編號、或者其他物品編號等。不願意採用表的自增索引 id,同時又希望新生成的編號是不重複的。 這就需要考驗mysql的隨機數功能了。 Solution mysql的rand函
生成不重複隨機數的方法 --抽獎問題等
問題描述: 給定一個n,一個m 要求在1 ~ n這n個數字中,生成m個不重複的隨機數。 思路: 生成隨機數大家都知道,C++中也提供了相關的函式——rand()。 但是問題中要求生成的是無重複的隨機數,這裡就需要對生成的隨機數進行去重操作了。 首選最
Java產生不重複隨機數方法
關於生成Java不重複的隨機數: import java.util.*; publicclass Test...{ publicstaticvoid main(String[] args)...{ //生成 [0-n) 個不重複的隨機數 / st 用
C# Random 生成不重複隨機數
名稱空間:System 表示偽隨機數生成器,一種能夠產生滿足某些隨機性統計要求的數字序列的裝置。 偽隨機數是以相同的概率從一組有限的數字中選取的。所選數字並不具有完全的隨機性,因為它們是用一種確定的數學演算法選擇的,但是從實用的角度而言,其隨機程度已足夠了。 偽隨機數的
ios 生成不重複隨機數
一、先講下ios三種取隨機數的方法: 1. srand((unsigned)time(0)); //不加這句每次產生的隨機數不變 int i = rand() % 5;
C#中生成不重複隨機數
如果只是生成一個隨機數,C#中的Random函式就足夠用了,但如果需要生產若干個隨機數,且這些數不能重複,就需要自己來寫相應的方法了。 1.使用List<int>來儲存隨機數,List.Contain方法來判斷生成的隨機數是否已經存在 以在1-10中取5個不重複
生成不重複隨機數的演算法(其一)
背景: 隨機生成點菜選單,其中一個需求是不重複取隨機數。 在網上看到一個比較好的演算法,記錄如下: import java.util.Random; public class test { private static int RANGE = 10; privat
set生成不重複隨機數
“ES6對js提供了各種合乎程式設計規範的拓展,給開發工作帶來了極大的便利。減少可開發過程中製造工具函式的耗費,同時減少對第三方工具函式庫的依賴。本系列的筆記,主要是記錄日常開發中常用的ES6使用方法。
jq生成不重複隨機數
酒逢知己千杯少,話不投機半句多,直接上程式碼 程式碼 var arr = [];//存放隨機數的陣列 var arrLen = 5;//陣列長度,也用來限制範圍 for(var i=0; i<arrLen; i++){
oracle生成不重複隨機數
1.建立FUNCTION fn_ifrandom(其中用到遞迴) CREATE OR REPLACE FUNCTION fn_ifrandom (tmpallrandom IN clob,tmprandom IN VARCHAR2,allcount in number)
[js][技巧]生成指定範圍指定個數的不重複隨機數
今天偶然看到的 比如要生成 1-100範圍之內的10個不重複隨機數,程式碼就可以這麼寫 var arr = []; for (var i = 1; i <=100; i++) { arr.push(i); } arr.sort(
C語言、Java兩種方式下的——規定範圍內不重複隨機數
示例1:C語言版 #include <stdio.h> #include <stdlib.h> #include <time.h> //隨機產生規定個數的不重複數字 int findSame(int *arr, int in, int
[Java]不重複隨機數生成簡易演算法
方法一 通過單個數組簡易實現不重複隨機數生成,先上原始碼。 /** * 獲取隨機陣列 * @param 源陣列 * @param size 目標陣列大小 * @return 隨機陣列 */ public static int[] getRandomRe
java中生成不重複隨機的數字
Java中產生隨機數1 . 呼叫java.lang下面Math類中的random()方法產生隨機數新建一個檔案字尾名為java的檔案,檔名取為MyRandom,該類中編寫如下的程式碼:public class MyRandom {public static void main(String[] args) {