Java两种常用的随机数生成方式(小白总结)

 更新时间:2020年10月13日 09:11:03   作者:倏逝波  
这篇文章主要介绍了Java两种常用的随机数生成方式(小白总结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

人机交互过程中,当我们需要机器给我们反馈不确定的数字结果时,就会需要用到随机数了,那么,在Java中,我们应当如何来生成并使用随机数呢?

一、通过Random类来实现

Random类是JDK的java.util包中的一个工具类,该类可用于在指定范围内产生随机数字。考察一下Random类的两种构造方法:无参构造和有参构造

Random(); 无参构造方法创建一个伪随机数生成器。Random(long seed);有参构造方法使用一个long型的种子创建伪随机数生成器。
下面分别使用两种方式创建Random对象来获取10个0到100的随机数

无参构造方式

public class demo1 {
  public static void main(String[] args) {
    Random random = new Random();
    for (int i = 0; i < 10; i++) {
      System.out.println(random.nextInt(100));
    }
  }

运行结果:


这里总结一个应用random.nextInt()的式子:random.nextInt(n)+m,返回的是m到m+n-1之间的随机数。比如random.nextInt(9)+1,得到就是1到10之间的某数,如果没有n和m,那么就是生成一个随机的int类型的值。当然除了int类型,也可以生成其他数字型的基本数据类型的随机数,比如double、float、byte等等。

  • nextDouble()方法返回的是0.0到1.0之间的一个double类型的值
  • nextFloat()方法返回的是0.0到1.0之间的一个float类型的值

有参构造方式

public class demo1 {
  public static void main(String[] args) {
    Random random = new Random();
    for (int i = 0; i < 10; i++) {
      System.out.println(random.nextInt(100));
    }
    Random random1 = new Random(100);
    System.out.println("---------");
    for(int i = 0 ;i<10;i++){
      System.out.println(random1.nextInt(100));
    }
  }

这里为了方便跟无参构造方法创建的随机数生成器作比较,创建了两个Random对象。

运行结果:

在这里插入图片描述

再执行一次代码的结果:

在这里插入图片描述

怎么样?是不是发现下面的有参构造生成的随机数每次运行结果都是一样的,而无参构造方法的random对象每次都能得到不同的随机数。

这里的原因是:无参构造方法在创建Random对象时没有传入种子参数,程序会自动以当前时间为时间戳,于是每一次的运行结果都是不同的。而有参构造方法创建Random对象时传入了种子参数,两次运行时种子相同,实际上不管运行多少次,结果都是一样的。

二、使用Math类的random方法

Java中的Math类也提供了一个生成随机数的random方法。
首先需要明确,Math.random()是随机生成一个0.0到1.0之间的double类型的随机数,这里包含0而不包含1。

常见的用法:

public class demo1 {
  public static void main(String[] args) {
    for (int i = 0; i < 3; i++) {
      System.out.println((int) (Math.random() * 10));
    }
  }

Math.random()生成0到1之间的double数,乘以10就变成了0到10之间的double数,再转成int型,这是我平时接触比较多的用法(通常我们使用随机数也是int类型的居多)。运行结果如下(3个0到10之间的整数):

在这里插入图片描述

根据需要可以灵活使用random()方法:

  • (int)(Math.random()*n)生成大于等于0小于n的随机数。
  • (int)(Math.randon()*n)+m生成大于等于m小于m+n的之间的随机数。
  • (int)(Math.random()*(n-m)+m)生成从m到n范围内的数,包含m不包含n。

另外,我们还可以用这种方式生成字符:

随机生成a~z之间的字符
(char)(‘a'+Math.random()*(‘z'-‘a'+1));

随机生成cha1~cha2的字符
(char)(cha1+Math.random()*(cha2-cha1+1));

小结

以上就是近期自己总结的两种Java中生成随机数的方法,实际上打开Math类中的random方法的源码我们可以发现,这个方法就是直接调用Random类中的nextDouble方法来实现的。至于实际使用看个人爱好吧,比较推荐直接使用Math类的random方法,要记住的是,以上两种方法生成的随机数都是会重复的,如果有不能重复的需求,则需要添加其他操作了。

到此这篇关于Java两种常用的随机数生成方式(小白总结)的文章就介绍到这了,更多相关Java 随机数生成内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java对象的内存布局详细介绍

    Java对象的内存布局详细介绍

    这篇文章主要介绍了Java对象的内存布局,我们知道在Java中基本数据类型的大小,例如int类型占4个字节、long类型占8个字节,那么Integer对象和Long对象会占用多少内存呢?本文介绍一下Java对象在堆中的内存结构以及对象大小的计算
    2023-02-02
  • Idea配置超详细图文教程(2020.2版本)

    Idea配置超详细图文教程(2020.2版本)

    这篇文章主要介绍了Idea配置超详细图文教程(2020.2版本),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Java对Excel表格的上传和下载处理方法

    Java对Excel表格的上传和下载处理方法

    这篇文章主要介绍了Java对Excel表格的上传和下载处理方法,需要的朋友可以参考下
    2017-08-08
  • java如何对map进行排序详解(map集合的使用)

    java如何对map进行排序详解(map集合的使用)

    这篇文章主要介绍了java如何对map进行排序,java map集合的使用详解,大家可以参考使用
    2013-12-12
  • SpringBoot指定激活配置文件的方法

    SpringBoot指定激活配置文件的方法

    Spring Boot 对多环境整合已经有了很好的支持,能够在运行间、打包时自由切换环境,这篇文章主要介绍了SpringBoot指定激活配置文件,需要的朋友可以参考下
    2023-11-11
  • Java实现一个简易聊天室流程

    Java实现一个简易聊天室流程

    这篇文章主要介绍了我的java课程设计一个多人聊天室(socket+多线程)本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-11-11
  • 深入了解java Lombok的使用方法

    深入了解java Lombok的使用方法

    这篇文章主要介绍了深入了解java Lombok的使用,Lombok是一个通过注解以达到减少代码的Java库,如通过注解的方式减少get,set方法,构造方法等,需要的朋友可以参考下
    2019-06-06
  • 详解Java编程中面向字符的输出流

    详解Java编程中面向字符的输出流

    这篇文章主要介绍了Java编程中面向字符的输出流,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-10-10
  • 关于Javaweb的转发和重定向详解

    关于Javaweb的转发和重定向详解

    这篇文章主要介绍了关于Javaweb的转发和重定向详解,请求的转发,是指服务器收到请求后,从一个服务器端资源跳转到同一个服务器端另外一个资源的操作,需要的朋友可以参考下
    2023-05-05
  • Java收集的雪花算法代码详解

    Java收集的雪花算法代码详解

    这篇文章主要介绍了Java实现雪花算法的详细代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-10-10

最新评论