java基础--16.java.util.Random类--产生随机数的N种方法

产生随机数的方法:

1.使用Math类自带的random方法

random方法产生的是0.0-1.0之间的随机数

1.1产生任意范围之内的随机数

参考公式: (int)( Math.random() * (end - start + 1))+start

例:产生5-8之间的随机数:

int x = (int)(5+Math.random()*(8-5+1));

2.使用java.util类中的Random类

 2.1带种子的构建方式:

  A:Random() 默认种子,每次产生的随机数不同

 2.2不带种子的构建方式:

  B:Random(long seed)指定种子,每次种子相同,随机数就相同
  

调用nextInt(arg)/nextDouble(arg)方法产生**

A:int nextInt():返回int范围内的随机数

B:int nextInt(int n):返回[0,n) 范围内的随机数

Random ran = new Random();

Integer x1 = ran.nextInt(20);
Double x2 = ran.nextDouble(3.0);

3.使用System类中的currentTimeMillis()方法返回的long值取模运算,就可以将结果限制在一个范围内了

三种方法举例

package cn.math;

import java.util.Random;

public class RandomDemo {

    public static void main(String[] args) {
        /*
         * 方法1:使用java.lang.Math类自带的random方法
         *  使用方法:(数据类型)(最小值+Math.random()*(最大值-最小值+1))
         */
        //例1.1:产生1-10之间的随机整数
        System.out.println("~"+(int)(1+Math.random()*10));
        //例1.2:产生5-8之间的随机整数
        System.out.print("~"+(int)(5+Math.random()*(8-5+1)));
        //例1.3:产生100之内的随机整数(0~99)
        System.out.print("~"+(int)(Math.random()*100));

        /* 2.使用java.util类中的Random类的nextInt(arg)/nextDouble(arg)方法产生
         *  如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,
         *  它们将生成并返回相同的数字序列。为了保证实现这种特性,我们为类Random指定了特定的算法。
         *  为了 Java 代码的完全可移植性,Java 实现必须让类 Random 使用此处所示的所有算法。
         *  但是允许 Random 类的子类使用其他算法,只要其符合所有方法的常规协定即可。
         */
        //2.1带种子的构建方式(此种方式,无论程序运行多少次,返回结果都是一样的)
        //2.1.1 使用555L作为种子产生随机数
        Random ran = new Random(555L);
        int i = 3;
        while(i--!=0){
            System.out.print("~"+ran.nextInt());
        }
        //结果:~-1367481220~292886146~-1462441651
        System.out.println("-------------------------");
        //2.1.2 同样使用555L作为种子产生随机数
        Random random = new Random();
        random.setSeed(555L);
        for (int i1 = 0; i1 < 50; i1++) {
            System.out.print("~"+random.nextInt());
        }
        //结果:~-1367481220~292886146~-1462441651 ,与上面产生的结果相同(关键是种子要一样)

        //2.2不带种子的构建方式(此种方式将会返回随机的数字,每次运行结果都不一样)
        Random ran2 = new Random();
        int i2 = 30;
        while(i2--!=0){
            System.out.print("~"+ran2.nextInt());
        }

        //3 使用System类中的currentTimeMillis方法产生50以内的随机数
        long r1 = System.currentTimeMillis();
        System.out.println(r1%50);
    }

}
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值