Java中随机数函数Random()详解+案例

Java中Random()对象是生成随机数的对象。Random()有两种构造方法:

       Random():创建一个新的随机数生成器,这种方式采用默认的种子。

       Random(long seed):使用seed为种子创建一个新的随机数生成器。    

种子的作用:我们在创建Random对象的时候,如果不设定种子,对象会采用默认的种子(默认当前系统时间的毫秒数为种子)。Random()对象生成的随机数是伪随机数(通过算法产生的随机数都是伪随机数),这就意味着如果我们知道了种子,或者已经产生的随机数,都可能获得接下来随机序列的信息(这样就使得随机数有了可预测性,如果种子数一样,则会生成相同的随机数,具体可以看:案例1)。只有通过真实的随机时间产生的随机数才是真随机。例如通过机器的硬件噪声来产生的随机数、通过当前环境pm10数据产生的随机数。虽然两种构造方法都是伪随机,但是无参的构造方法具有更强的随机性,能满足一般统计上的随机数要求。另外,种子数只是随机算法的起源数字,和生成的随机数没有任何关系,可以随意设置合法的种子数

案例1:

 // 种子数都设为6
Random numList = new Random(6);
Random numList2 = new Random(6);
// 随机生成10个随机数
for(int i=0; i<10; i++) {
    //生成一个[0,10)之间的随机数
    int num =  numList.nextInt(10) ;
    int num2 =  numList2.nextInt(10) ;
    System.out.println("num1 =" + num + ", num2 = " + num2);
}

      

案例2:

       常用随机数的方法都是生成某个区间的随机数

Random numList = new Random();
// 随机生成10个随机数
System.out.println("生成一个[50,100)之间的随机数:");
for(int i=0; i<10; i++) {
    //生成一个[50,100)之间的随机数
    int num =  numList.nextInt(50) + 50 ;
    System.out.print(num + " ");
}
// 生成一个[50,100)之间的随机数:
// 96 73 76 95 71 78 77 88 66 92
注意:Random()生成的随机数不能保证重复的数据,如果需要生成重复的数据,则需要跟集合配置使用。

案例三:

/**
 * 生成一个特定格式的字符串数组
 * 字符串格式为:
 *  1,特定字符串头:YGMANG
 *  2,6个数字+字母的随机大写字符
 *  3,目前的时间戳:时间格式为yyyyMMddHHmmss
 */
@Test
public void arrayTest() {
    StringBuffer flag = new StringBuffer(); //定义一个边长的字符串对象
    String headNUm = "YGWNGX"; //设置字符串固定头
    flag.append(headNUm);
    String sources = "0123456789ABCDEFIJKLMNOPQRSTUVWXYZ"; //定义一个数字+字母的字符串
    Random rand = new Random();
    SimpleDateFormat myFmt = new SimpleDateFormat("yyyyMMddHHmmss");//规定生成时间戳的格式
    for (int j = 0; j < 6; j++)
    {
        flag.append(sources.charAt(rand.nextInt(sources.length())));
    }
    Date date = new Date();
    flag.append(myFmt.format(date));
    System.out.println("生成的随机字符串为:" + flag.toString());
    /**
     * 生成的结果为:
     * 生成的随机字符串为:YGWNGXOKW9DK20191017091540
     */
}

             

Random9()方法摘要:

Java.util.Random()方法摘要:

方法

返回值

解释

next(int bits)

int

生成下一个伪随机数。

nextBoolean()

boolean

返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的boolean值。

nextBytes(byte[] bytes)

void

生成随机字节并将其置于用户提供的 byte 数组中。

nextDouble()

double

返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布的 double值

nextFloat()

float

返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布float值。

nextGaussian()

double

返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的double值,其平均值是0.0标准差是1.0。

nextInt()

int

返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。

nextInt(int n)

int

返回一个伪随机数,它是取自此随机数生成器序列的、在(包括和指定值(不包括)之间均匀分布的int值。

nextLong()

long

返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。

setSeed(long seed)

void

使用单个 long 种子设置此随机数生成器的种子

给出几个例子:

1.生成[0,1.0)区间的小数:double d1 = r.nextDouble();

2.生成[0,5.0)区间的小数:double d2 = r.nextDouble() * 5;

3.生成[1,2.5)区间的小数:double d3 = r.nextDouble() * 1.5 + 1;

4.生成-231到231-1之间的整数:int n = r.nextInt();

5.生成[0,10)区间的整数:

int n2 = r.nextInt(10);//方法一

n2 = Math.abs(r.nextInt() % 10);//方法二

  • 30
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
JavaRandom()函数是一个伪随机数生成器,它可以生成一个范围内的随机数。具体来说,它可以生成整数、浮点数、高斯分布随机数等。 Random()函数的底层实现是通过一个叫做线性同余法的算法来实现的。它是基于一个种子值来生成随机数的,种子值可以通过Random()函数的构造器来指定,如果不指定则默认使用系统当前时间作为种子值。 线性同余法的基本原理是:通过一系列数学运算,将当前种子值转化为下一个种子值,并通过这个新的种子值来生成随机数。具体的计算公式如下: seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1) 其,seed表示当前种子值,0x5DEECE66DL和0xB是固定的常数。 Random()函数生成随机数的范围是根据数据类型的不同而不同的。例如,生成整数的范围是从负的2的31次方到正的2的31次方减1;生成浮点数的范围是从0到1。 下面是一些Random()函数的使用示例: // 生成一个在指定范围内的整数 Random random = new Random(); int num = random.nextInt(100); // 生成0-99的整数 // 生成一个在指定范围内的浮点数 double d = random.nextDouble(); // 生成0-1之间的浮点数 // 生成一个高斯分布的随机数 double gaussian = random.nextGaussian(); // 生成一个服从标准正态分布的随机数 需要注意的是,由于Random()函数是一个伪随机数生成器,它的随机数序列是有规律的。如果需要更高质量的随机数,可以考虑使用SecureRandom()函数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是王小贱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值