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 阅读(247) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
 

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

常用链接

留言簿(1)

随笔分类

随笔档案

PL/SQL存储过程与函数

搜索

  •  

最新评论

阅读排行榜

评论排行榜