vlinDone
BlogJava
首页
新文章
新随笔
聚合
管理
posts - 33, comments - 17, trackbacks - 0
随机数发生器
1
import
java.util.Arrays;
2
import
java.util.Random;
3
4
/** */
/**
5
* <code>RandomUtil</code> - Random Tool Class.
6
*
@author
SageZk
7
*
@version
1.0
8
*/
9
public
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
<
0
)
return
null
;
//
长度小于 0 的数组不存在
32
if
(len
==
0
)
return
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(
1
,
35
,
7
);
58
if
(la
==
null
)
continue
;
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)
编辑
收藏
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
<
2008年7月
>
日
一
二
三
四
五
六
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔分类
个人
网摘(6)
随笔档案
2008年12月 (2)
2008年8月 (1)
2008年7月 (24)
2008年6月 (1)
2008年5月 (4)
PL/SQL存储过程与函数
搜索
最新评论
1. re: 18位号码身份证校验码的计算公式[未登录]
1@邱丽娟
--李杰
2. re: 生成 JSON 字符串的工具
ddddddddd
--hls
3. re: 18位号码身份证校验码的计算公式
340621198706139338
--陆树军
4. re: 生成 JSON 字符串的工具
12121
--11112dacda
5. re: 18位号码身份证校验码的计算公式
wozhidao
--lixziyu
阅读排行榜
1. 18位号码身份证校验码的计算公式(25051)
2. 生成 JSON 字符串的工具 (4954)
3. s:select(2859)
4. 关于 Calendar.getInstance()(1408)
5. 根据输入的ISBN号,检验ISBN的有效性(1394)
评论排行榜
1. 18位号码身份证校验码的计算公式(10)
2. 根据输入的ISBN号,检验ISBN的有效性(4)
3. 生成 JSON 字符串的工具 (2)
4. 时间计算工具类(1)
5. 数据库连接(0)