javascript小实例,编写一个方法,实现从n-m个数中随机选出一个整数

别怪我是一个闷葫芦,没那么多花哨的语言,废话不多说,先说说小实例的要求:

编写一个方法,实现从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。

是不是很简单,对就是这么简单,今天不扩展,随机数还是有很多的大用途的,有机会写一下相关的应用!

行文仓促!有理解的不正确的或者是遗漏的东西,万望批评指正!不胜感激!

 

posted @ 2016-03-01 11:52  凌云之翼  阅读(1915)  评论(0编辑  收藏  举报