1. 程式人生 > >java生成不重複的隨機數【某個範圍0-10】或者【某個陣列int[1,3,56,14,26,22,17]】

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) {