Java 随机数怎么生成

 2022-09-08
原文地址:https://cloud.tencent.com/developer/article/2068641

前言:

  每一门程序设计语言基本都具有一个随机函数,而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 }