js获取[n,m]的随机整数值
2018-06-24 01:31:37来源:未知 阅读 ()
1.需要用到的方法:
Math.random:取大于等于0到小于1之间的随机数;
Math.floor:向下取整;
Math.ceil:向上取整;
2.看了一个面试题,要求有个函数fn,参数为n,需要返回[2,32]之间的n个整数。第一次写的时候如下:
var fn=function(n){ var arr=[],num; for(var i=0;i<n&&n<32;i++){ num=Math.floor(Math.random()*30+2); if(arr.indexOf(num)===-1){ arr.push(num); }else{ i--; } } return arr; }; var a=fn(3); console.log(a.sort());
然后发现2到32包含2和32的时候是有31位数字的,在这里我取错了只是[2,32);然后才查了下random时大于等于0小于1的数,所以向下取整时始终是小于1*30+2的即32。
而题目是要求包含2和32,我就想向上取整不就有了32,同时当随机数为0时也就有2了,就有了如下的代码:
var fn=function(n){ var arr=[],num; for(var i=0;i<n&&n<32;i++){ num=Math.ceil(Math.random()*30+2); if(arr.indexOf(num)===-1){ arr.push(num); }else{ i--; } } return arr; }; var a=fn(31); console.log(a.sort());
然后运行,没有结果浏览器卡住了,类似陷入死循环。我想了下才发现自己犯了个很低级的错误,等于2的时候只有random的值为0,而如果随机数是随机的无法确保什么时候为0,如果一直没取到0,就会一直i--,直到有0为止。运气不好就会运行很久。所以改了代码如下:
var fn=function(n){ var arr=[],num; for(var i=0;i<n&&n<32;i++){ num=Math.floor(Math.random()*31+2); if(arr.indexOf(num)===-1){ arr.push(num); }else{ i--; } } return arr; }; var a=fn(31); console.log(a.sort());
改成向下取整当random的值小于1/31时,向下取整为0,这样就得到2了,而这样的区间比只是一个0的概率大的多,而最大数始终小于1*31+2,向下取整后就是32。
总结:
a.Math.random是取[0,1)的数;
b.取[min,max]的随机整数时使用如下公式:
Math.floor(Math.random().(max-min+1)+min)
c.取[min.max)的随机整数时使用如下公式:
Math.floor(Math.random().(max-min)+min)
d.取(min,max]的随机整数时使用如下公式:
Math.floor(Math.random().(max-min)+min+1)
上面的是由(min,max]即[min+1,max]代入b的公式算出来就可以。
e.不要使用ceil,因为无法控制Math.random()什么时候为0,同理如下:
Math.ceil(Math.random().(max-min+1)+min)
好像是取(min,max]之间的值,但是不清楚什么时候就会取到min。使用random的取随机整数的时候使用向下取整。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- javascript如何获取图片颜色 2020-03-08
- 分享JavaScript获取网页关闭与取消关闭的事件 2020-02-29
- 高效的获取当前元素是父元素的第几个子元素 2020-02-15
- JS怎么获取父节点 2020-02-14
- JS获取当前地理位置的方法 2020-01-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash