Java Random.nextInt()方法原理解析

 更新时间:2020年09月02日 11:10:20   作者:aspirant  
这篇文章主要介绍了Java Random.nextInt()方法原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

lic int nextInt(int n)

该方法的作用是生成一个随机的int值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。

关于Random r = new Random(47)中47的意思
今天看Java编程思想的时候看到了一段这样的代码:

Random r = new Random(47);
int a = r.nextInt(26);
System.out.println(a);

刚开始没注意那个47,以为是随机一个47以内的数,但是看到后面在nextInt(26)里面还有个26,一想26应该才是随机数的范围,那这个47是什么呢?

然后看源码,看不懂。。。只知道是一个种子,然后百度查,总算理解了一些,如下:

首先要搞明白种子的概念:

想要获取一个范围内的随机数(例如26,随机数可能是0-25),首先需要一个种子(其实就是一个数值)。

每个种子会对应这个范围内(0-26)的唯一的一个随机数。

47这个种子在26这个范围内,所对应的随机数为24,所以每次随机得出的结果都为24.

(注意:47在26这个范围内对应的是24,这个是死的,固定的,无论你执行多少次,它还是24)

至于为什么种子47会对应24,这个涉及到java封装的算法,有兴趣可以深入了解。

但是大家可能会发现,平常我们生成随机数的时候并没有传那个种子,如下:

Random r = new Random();
int a = r.nextInt(26);
System.out.println(a);

然后一运行,发现每次运行出来的结果不一样,是所谓的随机数,原来如果没有种子的话,程序会取当前日期的毫秒数来作为种子,所以每次执行种子都会不同,因为每次时间的毫秒数是不一样的,所以随机出来的数也就会不同。

总之,new Random(47)里面的47表示产生随机数的一个种子,nextInt(26)表示随机数的范围,种子和范围是相关联的,一个种子对应一个范围内的一个固定的随机数,如果不填种子,则会默认取当前时间的毫秒数作为种子来生成随机数。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot逻辑异常统一处理方法

    SpringBoot逻辑异常统一处理方法

    这篇文章主要介绍了SpringBoot逻辑异常统一处理方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Java算法之最长公共子序列问题(LCS)实例分析

    Java算法之最长公共子序列问题(LCS)实例分析

    这篇文章主要介绍了Java算法之最长公共子序列问题(LCS),结合实例形式分析了最长公共子序列的原理及问题解决方法,需要的朋友可以参考下
    2017-11-11
  • Java使用split分割无效获取不到预期效果的解决办法

    Java使用split分割无效获取不到预期效果的解决办法

    这篇文章主要给大家介绍了关于Java使用split分割无效获取不到预期效果的解决办法,java的String类中有个split方法,这个是我们经常使用到的,需要的朋友可以参考下
    2023-08-08
  • ActiveMQ消息签收机制代码实例详解

    ActiveMQ消息签收机制代码实例详解

    这篇文章主要介绍了ActiveMQ消息签收机制代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 如何从Java接口的角度切入静态工厂模式

    如何从Java接口的角度切入静态工厂模式

    静态工厂模式是一种改进的获取实例的方法。通常我们会使用new关键字调用类的构造方法来创建一个对象。静态工厂可以根据用户传入的参数来动态地实例化对象,避免一次性实例化所有对象所带来的性能浪费,同时也降低了耦合性。
    2021-06-06
  • SpringBoot资源文件的存放位置设置方式

    SpringBoot资源文件的存放位置设置方式

    这篇文章主要介绍了SpringBoot资源文件的存放位置设置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • java微信企业号开发之开发模式的开启

    java微信企业号开发之开发模式的开启

    这篇文章主要为大家详细介绍了java微信企业号开发之开发模式的开启方法,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • RocketMQ producer发送者浅析

    RocketMQ producer发送者浅析

    RocketMQ生产者是一种高性能、可靠的消息发送者,能够将消息快速、可靠地发送到RocketMQ消息队列中。它具有多种消息发送模式和消息发送方式,可以根据不同的业务需求进行灵活配置
    2023-04-04
  • SpringBoot中定义Bean的方法总结

    SpringBoot中定义Bean的方法总结

    在Spring Boot应用程序中,定义Bean是非常常见的操作,它是构建应用程序的基础,pring Boot提供了多种方式来定义Bean,每种方式都有其适用的场景和优势,本文将介绍Spring Boot中定义Bean的几种常见方式,需要的朋友可以参考下
    2023-12-12
  • 详解Maven POM(项目对象模型)

    详解Maven POM(项目对象模型)

    这篇文章主要介绍了Maven POM(项目对象模型)的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07

最新评论