编写一个方法,实现从n-m个数中随机选出一个整数,要求:传递的参数不足两个或者不是有效数字,返回[0-1]之间的随机数,需要解决n和m两个数大小问题,如果m<n,两个参数的值进行交换;
看到这个求随机数的小实例,相信很多人都会写,也写过很多相关的程序代码,所以,重要的知识点没有,旨在给初学者一些启发,大牛可略过!
既然是给初学者看的,那么我们就从最基本的东西一步一步的看,便于理解,先拆分一下要求吧:
1.求一个n-m的随机整数;
2.参数不足两个或者不是有效数字,返回[0-1]的随机数;
3.解决两个参数的大小问题。
基本上可以分为这3部分了,那我们先开始最简单的0-1的随机数(核心函数Math.random)
1 var num = Math.random(0,1); //0-1
既然能得到0-1之间的随机数,那能不能得到0-100之间的随机数呢,于是就有了下面的:
1 var num = parseInt(Math.random(0,1)*100); //0-100
这个为什么要用parseInt()(取整函数),是因为得到的随机数是带小数点的,取整就能得到0-100之间的整数,获取0-10也就很简单了,只需要改乘数就可以了
1 var num = parseInt(Math.random(0,1)*10); //0-10
那么,我想得到5到10之间的整数,要怎么做呢,很简单,我们可以拆分一下,5-10,最小是5,最大是10,那么让5+n,n只要在0-5之间就能满足条件,所以就是这样
var num = parseInt(Math.random(0,1)*5) + 5; //5-10
再来一个例子,实现50-100之间的整数
var num = parseInt(Math.random(0,1)*50) + 50; //50-100
从上面的几个例子可以总结一个规律,如果我们想实现n-m之间的整数,则可以写成这样
var num = parseInt(Math.random(0,1)*(m-n)) + n;
那第一个条件就满足了,第2,第3个条件无非就是判断条件了:
function randomNum(){ var arg = arguments; //获取参数集合 var num = null; if(arg.length<2 || arg.length>2 || isNaN(arg[0]) || isNaN(arg[1])){ //当参数小于2个或者大于2个或者不为数字的时候 num = Math.random(0,1); }else if(arg[0]>arg[1]){//如果第一个参数大于第二个参数 num = parseInt(Math.random(0,1)*(parseInt(arg[0])-parseInt(arg[1]))) + parseInt(arg[1]); }else{ //第一个参数小于第二个参数,且为数字 num = parseInt(Math.random(0,1)*(parseInt(arg[1])-parseInt(arg[0]))) + parseInt(arg[0]); } return num; } console.log(randomNum('30','40')); //30-40 console.log(randomNum(30,40)); //30-40
细心的人可以看到好多的parseInt(),先从里面的说起吧,里面的parseInt(arg[0]),parseInt(arg[1])是为了防止当数字为字符串时,会把数字当字符串使用,就成了字符链接了,外面的parseInt()则是为了取随机整数的,明白了吗?
得到的效果就是下面的2个输出,如果不满足条件,则返回0-1之间的随机数,如果你想让参数是字符串数字也返回0-1时,只需要加一个判断,判断参数是否是字符串,是就返回0-1。
是不是很简单,对就是这么简单,今天不扩展,随机数还是有很多的大用途的,有机会写一下相关的应用!
行文仓促!有理解的不正确的或者是遗漏的东西,万望批评指正!不胜感激!