做一个积极的人

编码、改bug、提升自己

我有一个乐园,面向编程,春暖花开!

在未来城市工作的的程序员小木,做了一个梦,梦到自己在塔鲁姆的街道上看到一个姑娘,这个姑娘从远处走向他,脸上带着微笑。让小木很是着迷,小木呆呆的望着姑娘从他身边走过,当他回过神来,发现姑娘已经走远,小木赶忙去追这位姑娘,突然天空中飘下一张字条,上面写着:

我一眼就看出你是Java程序员了,当你能用代码实现 520~1314 之间的随机整数,那么我会主动来找你的!

小木还很纳闷,为什么这个姑娘知道自己是一个程序员,姑娘难道是上天专门派来的吗 ?

小木同学,见下图:

小木很兴奋啊,终于我学的Java编程有用武之处了,这个比写CRUD和看项目留下的烂代码好很多啊,我写好了,姑娘就来找我了。小木大脑开始快速运转,脑神经之间相互发送消息,收集储存起来的数据。

几秒之后,小木想到了一个方法,在刚开始学习Java的时候学过一个 Math 类,它里面有一个生成随机数的方法random()。但是通过Math.random() 获取的随机数是[0,1)之间的double值。注:包含0,但1不包含!

那要获取整数,则需要将上面的结果转行成int类型即可。获取[0, 1)之间的int整数。方法如下:

double d = Math.random();
// [0, 1)
int love = (int) (d); 
// randNumber 将被赋值为一个 MIN 和 MAX 范围内的随机数
int randNumber = rand.nextInt(MAX - MIN + 1) + MIN; 

简单思考:要让值落在520~1314,那么

MAX : 1314

MIN: 520

因为 Math.random() 获取[0, 1),换算公式: (Math.random() * (MAX - MIN)) + MIN

根据公式照葫芦画瓢,小木很快就实现随机 520~1314 的代码了!

 double d = Math.random();
// [520, 1314)
int love = (int) (d * (1314-520)) + 520; 

写完上面的代码后,小木想还是要检查检查,不能马虎大意,毕竟这关乎姑娘会不会来找自己。代码运行N多遍之后,520是包含了,但是1314 怎么也出现不了!小木很快意识到这问题很严重。没有1314 姑娘找他这件事肯定就泡汤了。重新看上面的换算公式, 小木发现公式有点问题,少了个 1 啊!

正确的公式是 : (Math.random() * (MAX - MIN + 1)) + MIN

 double d = Math.random();
// [520, 1315)
int love = (int) (d * (1314 - 520 + 1) + 520; 

这样就完美一点了,随机数就可以包含1314,这样就可以[520,1314]了。

注: 为了方便阅读,括号内就没有直接写出运算后的值。

大脑还处在高速运转的小木,实现了上面的功能后,心想这么容易就能约到姑娘了,这是不是有点太简单了。于是又想还有没有其他办法还能实现此功能呢?又想到了有Math.random()。不是还有一个Random类嘛,和Random类一起的还有一个ThreadLocalRandom类。不管咋,我在用一种方法实现以下,好好表现一下自己也好!

使用Random获取[520, 1314]之间的int整数,Random 对象的nextInt(int) 方法,将生成 [0, int)之间随机取值的整数。根据上面的思路,实现代码如下:

Random random = new Random();
// [520,1315) == [520,1314]
int love = (random.nextInt(1314 - 520 + 1) + 520); 

小木在上面代码下面备注了如下内容:

1、Random类采用AtomicLong实现,保证多线程的线程安全性,但是多线程并发获取随机数时性能较差。

2、ThreadLocalRandom就实现了,ThreadLocalRandom继承了Random。多线程环境中可以使用ThreadLocalRandom作为随机数生成器,ThreadLocalRandom采用了线程局部变量来改善性能。

最后当小木写完代码后,听到早晨的闹钟响了,美梦就这样被闹钟无情的敲碎了,醒来后,小木久久不能忘记梦中的姑娘,想着什么时候能够再次偶遇!

你期待小木和梦中姑娘的的再次相遇嘛,我真的还期待,说不定一段美妙的爱情火花就会擦出。

原文 用Java实现在【520,1314】之间生成随机整数的故事

转载于:https://www.cnblogs.com/xiaoshen666/p/10881298.html

用Java实现在【520,1314】之间生成随机整数的故事相关推荐

  1. java将0到9随机输出_生成0到9之间的随机整数

    回答(20) 2 years ago 对于您给出的示例(从0开始直到9的整数),最干净的解决方案如下: from random import randrange randrange(10) 2 yea ...

  2. 【Java工具类】使用Random类对象生成随机整数

    本文目录 1.导言 2.Java实现与伪码模型 3.nextInt(bound)方法解析 4.nextInt(bound)方法高级玩法:控制随机数的生成范围 5.心得 6.随机数逸话 1.导言 Ran ...

  3. 随机密码生成python_每日一课 | Python 中生成 0 到 9 之间的随机整数

    很少有Python示例向您展示如何生成0(含)和9(含)之间的随机整数0 1 2 3 4 5 6 7 8 9 1.randrange 1.1生成0到9之间的随机整数 #!/usr/bin/python ...

  4. python随机生成数字_Python 中生成 0 到 9 之间的随机整数

    很少有Python示例向您展示如何生成0(含)和9(含)之间的随机整数0 1 2 3 4 5 6 7 8 9 1.randrange 1.1生成0到9之间的随机整数 #!/usr/bin/python ...

  5. 生成0到9之间的随机整数

    如何在Python中生成0到9(含)之间的随机整数? 例如, 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 #1楼 import random print(random. ...

  6. 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 NN 个 1 到 1000 之间的随机整数(N \leq 100N≤100),对于其中重复的数字,只保留一个,把其余相

    自己用了非常朴素的方法将本题解了出来. 三个for循环和两个sort,哈哈哈,xswl. 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 NN 个 1 到 1000 ...

  7. C++ 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对

    明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的 ...

  8. 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的

    明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的 ...

  9. python中生成随机整数,随机小数,0-1之间的小数

    python中生成随机整数,随机小数,0-1之间的小数 1.生成随机整数 import randomprint(random.randint(1,100))#生成1到100之间的随机整数 2.生成0- ...

最新文章

  1. 一个页面标题和过滤输出的解决方案(下)
  2. 让一个人从照片中消失,从未如此简单 | AI应用体验
  3. java11正式发布了,让java代码更完美
  4. 并行数据处理与性能详解与ForkJoin框架
  5. 第一章 Java快速入门
  6. labview dll 崩溃
  7. PowerDesigner 学习
  8. java复制对象_JAVA对象复制的方法
  9. Oracle定时调用存储过程
  10. 手机快充功能到底是充电头的功劳还是线的功劳?
  11. php如何查看openssl扩展安装成功,php如何安装openssl扩展
  12. zabbix企业应用之固定端口监控memcache
  13. HDU2569 彼岸【打表+记忆化递归】
  14. 计算机组成原理:二进制与十进制互转
  15. 调用企业微信接口发送微信消息
  16. 计算机硬盘数据如何恢复,怎样进行硬盘数据恢复
  17. 保研复习——线性代数3:矩阵的秩与线性方程组
  18. 会声会影制作MV(带歌词字幕)的方法
  19. 【量化笔记】配对交易
  20. 煤矿自动化系统指的是什么_煤矿综合自动化系统解决方案

热门文章

  1. jsp 9对象4作用域
  2. Hadoop学习资料整理
  3. sql2005版本以上的分页存储过程
  4. [转]RSA算法简介
  5. 光影变幻:自动化所基于最优传输理论的影视换脸技术
  6. 美人秀色空绝世,我用PS-GAN试伊妆
  7. 阿里巴巴Python工程师面试题之一:单引号,双引号,三引号的区别
  8. 【OpenCV】OpenCV函数精讲之 -- 多通道图像混合
  9. 【OpenCV】OpenCV函数精讲之 -- 命名空间
  10. CVPR 2021 | 商汤提出最强时序动作提名修正网络:TCANet