posts - 33,  comments - 17,  trackbacks - 0
           1import java.util.Arrays;
           2import java.util.Random;
           3
           4/**
           5 * <code>RandomUtil</code> - Random Tool Class.
           6 * @author SageZk
           7 * @version 1.0
           8 */

           9public class RandomUtil {
          10
          11    private RandomUtil() {}
          12
          13    private static Random rnd = null;
          14
          15    /**
          16     * 初始化隨機數發生器。
          17     */

          18    private static void initRnd() {
          19        if (rnd == null) rnd = new Random();
          20    }

          21
          22    /**
          23     * 計算并返回無重復值的以 <code>min</code> 為下限 <code>max</code> 為上限的隨機整數數組。
          24     * @param min 隨機整數下限(包含)
          25     * @param max 隨機整數上限(包含)
          26     * @param len 結果數組長度
          27     * @return 結果數組
          28     */

          29    public static int[] getLotteryArray(int min, int max, int len) {
          30        //參數校驗及性能優化
          31        if (len < 0return null;  //長度小于 0 的數組不存在
          32        if (len == 0return new int[0];  //返回長度為 0 的數組
          33        if (min > max) {  //校正參數 min max
          34            int t = min;
          35            min = max;
          36            max = t;
          37        }

          38        final int LEN = max - min + 1;  //種子個數
          39        if (len > LEN) return null;  //如果出現 35 選 36 的情況就返回 null
          40        //計算無重復值隨機數組
          41        initRnd();  //初始化隨機數發生器
          42        int[] seed = new int[LEN];  //種子數組
          43        for (int i = 0, n = min; i < LEN;) seed[i++= n++;  //初始化種子數組
          44        for (int i = 0, j = 0, t = 0; i < len; ++i) {
          45            j = rnd.nextInt(LEN - i) + i;
          46            t = seed[i];
          47            seed[i] = seed[j];
          48            seed[j] = t;
          49        }

          50        return Arrays.copyOf(seed, len);  //注意:copyOf 需要 JRE1.6
          51    }

          52
          53    //Unit Testing
          54    public static void main(String[] args) {
          55        final int N = 10000;  //測試次數
          56        for (int i = 0; i < N; ++i) {
          57            int[] la = RandomUtil.getLotteryArray(1357);
          58            if (la == nullcontinue;
          59            for (int v : la) System.out.printf("%0$02d ", v);
          60            System.out.println();
          61        }

          62    }

          63
          64}
          posted on 2008-07-23 17:53 scea2009 閱讀(267) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           

          <2008年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          PL/SQL存儲過程與函數

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 象山县| 浮山县| 枣庄市| 阿鲁科尔沁旗| 永宁县| 高陵县| 卢湾区| 天全县| 山阳县| 侯马市| 高邑县| 彭阳县| 留坝县| 葫芦岛市| 华安县| 明水县| 建昌县| 平泉县| 隆化县| 甘孜| 永昌县| 轮台县| 东安县| 怀柔区| 垫江县| 南宫市| 稻城县| 舒兰市| 凭祥市| 成安县| 会昌县| 喜德县| 酒泉市| 金湖县| 剑阁县| 云阳县| 韶关市| 柯坪县| 东乡| 高平市| 土默特左旗|