前言:
每一门程序设计语言基本都具有一个随机函数,而Java当中产生随机数的方式不拘一格。而且其中的Random工具类还有着更深入的应用,但本文仅对比3种产生随机数的方式,就不深入扩展分析其内部工具类了。
1)System.currentMillis()函数返回基于当前时间的Long整型随机数;
2)Math.random()返回0到1之间的浮点数,而且属于左闭右开:[0,1);
3)通过New Random().nextInt()实例化对象并利用函数产生一个int类型的随机数。
三种不同方式的代码实现如下:
1 package random;
2
3 import java.util.Random;
4
5 import org.junit.Test;
6
7 public class RandomTest {
8
9 public static void main(String[] args) {
10 new RandomTest().testRandom1();
11 new RandomTest().testRandom2();
12 new RandomTest().testRandom3();
13 }
14
15 /*
16 * 根据当前的标准时间,返回单个long类型的随机数
17 */
18 @Test
19 public void testRandom1() {
20 System.out.println(System.currentTimeMillis());
21 }
22
23 /*
24 * 采用Math类产生随机数,其返回浮点类型,区间为:[0,1)
25 */
26 @Test
27 public void testRandom2() {
28 for(int i=0;i<10;i++)
29 System.out.println(Math.random());
30 }
31
32 /*
33 * 利用Randoml工具类,产生10个随机数 当种子seed一样时,产生的2个序列相同
34 */
35 @Test
36 public void testRandom3() {
37 Random random1 = new Random(1);
38 for (int i = 0; i < 10; i++) {
39 System.out.print(random1.nextInt()+" ");
40 }
41 System.out.println();
42 Random random2 = new Random(1);
43 for (int i = 0; i < 10; i++) {
44 System.out.print(random2.nextInt()+" ");
45 }
46 }
47 }
另外,考虑到有些情况下我们需要批量产生随机数,故写了下面的程序。其功能是实现批量产生N个[0,MAX)范围内的随机数并写入txt文件:
1 package random;
2
3 import java.io.File;
4 import java.io.PrintWriter;
5
6 public class RandomFactory {
7
8 final static int N=1000000; //产生的随机数的个数
9 final static int MAX=10000; // 产生随机数的范围:[0,MAX)
10 final static String PATH="D:/random100w.txt"; //生成的文件路径
11 public static void main(String[] args) throws Exception{
12
13 PrintWriter output = new PrintWriter(new File(PATH));
14 for(int i=0;i<N;i++){
15 int x=(int)(Math.random()*1e4);
16 output.println(x);
17 }
18 //记得关闭字符流
19 if(output!=null){
20 output.close();
21 }
22 System.out.println("--End--");
23 }
24
25 }