• 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。

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

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

  • 相关阅读:
    HDU3107 Godfather(树的重心)
    POJ1655 Balancing Act(树的重心)
    codeforces 691F Couple Cover(暴力预处理)
    codeforces 691E Xor-sequences(矩阵快速幂)
    codeforces 691D Swaps in Permutation(并查集)
    HDU5727 Necklace(环排+匈牙利)
    codeforces679C Bear and Square Grid(dfs优化)
    codeforces679B Bear and Tower of Cubes(思路)
    spring boot
    spring boot资料收集
  • 原文地址:https://www.cnblogs.com/aer2005/p/8081266.html
Copyright © 2020-2023  润新知