Random()构造函数 有两种:
其一:Random()
创建一个新的随机数生成器。它是以当前时间的毫秒数,为种子。可以通过System.currentTimeMillis()来获得当前时间的毫秒数
其二:Random(long seed)
使用单个 long 种子创建一个新随机数生成器.
如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。
测试一:使用不带参数的构造方法
.
测试1
:nextInt();
返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int
值。
public static void main(String[] args) {
// TODO Auto-generated method stub
java.util.Random r=new java.util.Random();
for(int i=0;i<10;i++){
System.out.println(r.nextInt());
}
}
控制台打印:
-864316554
-2077454005
293730977
-1743870413
-1424715784
486969960
-988141949
-1930205453
1550615431
-1436965049
测试2
:nextInt(int n);
返回一个伪随机数,它是从此随机数生成器的序列中取出的、在 0
(包括)和指定值(不包括)之间均匀分布的 int
值。
public static void main(String[] args) {
// TODO Auto-generated method stub
java.util.Random r=new java.util.Random();
for(int i=0;i<6;i++){
System.out.println(r.nextInt(7));
}
}
4
4
2
2
0
2
问题:包含重复的数值
所以,在一定的取值范围内,如何将重复的数值去掉?
方法一:如果网页的访问频率
(
时间较短
)
较高,而又用以当前时间的毫秒数为种子,则可以使用
try {Thread.sleep(2);} catch(Exception e) {}
方法二:使用
Set
集合,过滤掉重复的记录
List searchList = getSearchList();
Set set = new HashSet();
Random random = new Random();
while (set.size() < 6 {
set.add(searchList(random.nextInt(listSize)));
}
思路:从一个集合中随机产生
6
个不重复的记录并显示出来。
测试二:使用带参数的构造方法.
Random random = new Random(7);
for (int i=0;i<6;i++) {
System.out.println(i+":"+random.nextInt());
}
0:-1156638823
1:-1552468968
2:-1077308326
3:41356089
4:1495978761
5:2107132509
总结:所以,如果用构造一个指定种子的
Random,
则,
如果所指定的种子相同
(
本例为
7)
,且调用的方法相同
(
本例为
random.nextInt())
,则产生的随机数也相同。