Java 随机数

Java 随机数生成的两种方式

在开发过程中可能会用到随机数的生成,一般我们通过在网上进行简单搜索都可以找到答案,但是有时候用到Math类提供的方法,有时候又是用到Random类提供的方法,那在Java中到底有几种生成随机数的方式?

Java 里用于生成随机数的方式有两种,通过 java.lang.Mathjava.util.Random 两个类可以生成随机数。

这里做一下笔记:

java.lang.Math

  • Math.random()
    Math.random() 返回 [0.0 , 1.0) 的double值

  • 如果想指定范围怎么办?
    (Math.random() * ((max - min) + 1)) + min

    可以一步一步的拆解下这个表达式:
    Math.random() * ( max - min ) 返回的数值范围应该是 [ 0, (max-min) ),比如要获取 [5,10] 之间的随机数,放在这个表达式里,应该是 Math.random() * 5 = [ 0, 5 ) , 为了达到 [ 5, 10 ] 的范围,这里需要加上 min 的值, 即 Math.random() * (max - min) + min, 但是这个表达仍然不能达到 10 这个范围,所以要再 加1,最后的结果就是 (Math.random() * ((max - min)+1) + min

java.util.Random

Random 类可以用于获取多种类型的随机数,int, float, double, long, boolean.

拿 int 来说,我们可以通过调用 nextInt() 来获得随机数

  • nextInt() 返回的是[-2^32 , 2^32]
public int nextInt() {
    return next(32);
}

protected int next(int bits) {
	long oldseed, nextseed;
	AtomicLong seed = this.seed;
	do {
	    oldseed = seed.get();
	    nextseed = (oldseed * multiplier + addend) & mask;
	} while (!seed.compareAndSet(oldseed, nextseed));
	return (int)(nextseed >>> (48 - bits));
}
  • nextInt(int bound) 返回的是 [0. bound )
public int nextInt(int bound) {
    if (bound <= 0)
        throw new IllegalArgumentException(BadBound);

    int r = next(31);
    int m = bound - 1;
    if ((bound & m) == 0)  // i.e., bound is a power of 2
        r = (int)((bound * (long)r) >> 31);
    else {
        for (int u = r;
             u - (r = u % bound) + m < 0;
             u = next(31))
            ;
    }
    return r;
}

总结: 对于简单的生成随机数来说,直接使用现成的方法就可以,如果希望获取某一范围内的随机数的话可以通过这两种方式:

  1. Math.random() * ((max - min)+1) + min
  2. random.nextInt(max - min) + min
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值