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)表示随机数的范围,种子和范围是相关联的,一个种子对应一个范围内的一个固定的随机数,如果不填种子,则会默认取当前时间的毫秒数作为种子来生成随机数。

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

相关文章

  • 基于Maven导入pom依赖很慢的解决方案

    基于Maven导入pom依赖很慢的解决方案

    这篇文章主要介绍了Maven导入pom依赖很慢的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • SpringBoot整合atomikos实现跨库事务的详细方案

    SpringBoot整合atomikos实现跨库事务的详细方案

    这篇文章主要介绍了SpringBoot整合atomikos实现跨库事务,业务主要涉及政府及企业且并发量不大,所以采用XA事务,虽然性能有所损失,但是可以保证数据的强一致性,需要的朋友可以参考下
    2022-06-06
  • IntelliJ IDEA中ajax开发实现分页查询示例

    IntelliJ IDEA中ajax开发实现分页查询示例

    这篇文章主要介绍了IntelliJ IDEA中ajax开发实现分页查询,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • SpringSecurity Web权限方案实现全过程

    SpringSecurity Web权限方案实现全过程

    Spring Security是一个功能强大且高度可定制的身份验证和授权框架,专门用于保护Java应用程序的Web集成,下面这篇文章主要给大家介绍了关于SpringSecurity Web权限方案实现的相关资料,需要的朋友可以参考下
    2024-01-01
  • Java调用打印机的2种方式举例(无驱/有驱)

    Java调用打印机的2种方式举例(无驱/有驱)

    我们平时使用某些软件或者在超市购物的时候都会发现可以使用打印机进行打印,这篇文章主要给大家介绍了关于Java调用打印机的2种方式,分别是无驱/有驱的相关资料,需要的朋友可以参考下
    2023-11-11
  • Java SQL注入案例教程及html基础入门

    Java SQL注入案例教程及html基础入门

    这篇文章主要介绍了前端开发每天必学之SQL及HTML入门基础知识,介绍了学习web前端开发需要掌握的基础技术,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • 解决SpringBoot使用@Value获取不到yaml中配置值的问题

    解决SpringBoot使用@Value获取不到yaml中配置值的问题

    在最近的开发中遇到一个问题,使用@Value获取yml文件中配置的属性时始终获取不到值,所以本文给大家详细介绍了SpringBoot使用@Value获取不到yaml中值的问题分析及解决方法,需要的朋友可以参考下
    2024-01-01
  • Java中过滤器 (Filter) 和 拦截器 (Interceptor)的使用

    Java中过滤器 (Filter) 和 拦截器 (Interceptor)的使用

    这篇文章主要介绍了Java中过滤器 (Filter) 和 拦截器 (Interceptor)的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • IntelliJ IDEA 常用设置(配置)吐血整理(首次安装必需)

    IntelliJ IDEA 常用设置(配置)吐血整理(首次安装必需)

    这篇文章主要介绍了IntelliJ IDEA 常用设置(配置)吐血整理(首次安装必需),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • 关于java的包Package中同名类的冲突及其理解

    关于java的包Package中同名类的冲突及其理解

    这篇文章主要介绍了关于java的包Package中同名类的冲突及其理解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08

最新评论