这里是两个方法

这里是两个方法

第二个是m-n不加1,向上取整,这样可以吗。还有刷新没看到2,是不包含最小数?


<!doctype html>

<html>

<head>

    <meta charset="UTF-8">

    <title>Document</title>

</head>

<body>

    <script>

    //大于等于0小于1的随机数

       var random=Math.random();

       console.log(random);



//封装一个函数,取两个参数(包括参数)之间的随机整数



//方法一 向下取整 Math.floor()

       // 生成一个n到m之间的随机整数

       function getRandom(n,m){

          var choise=m-n+1;  // 随机整数的个数

          return Math.floor(Math.random()*choise+n);

       }

       var random1=getRandom(2,6);

       var random2=getRandom(10,88);

       console.log(random1);

       console.log(random2);





//方法二 向上取整 Math.ceil()

       function getRandom(n,m){

          var choise=m-n;

          return Math.ceil(Math.random()*choise+n);

       }

       var random1=getRandom(2,6);

       var random2=getRandom(10,88);

       console.log(random1);

       console.log(random2);


    </script>

</body>

</html>


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

4回答
提问者 慕慕4335856 2020-03-25 20:24:15

算了,我自己想明白了,对于Math.random(),随机获取到0,概率就很小,因为小数点后很多位数,

2-6的随机数不取整的话,一样很多,随机到2就相当于Math.random()随机到0的概率,很小

好帮手慕夭夭 2020-03-25 20:21:37

同学你好,问题解答如下:

1.请同学再着重看一下第一种方法,是可以生成2的。在上一次回答中,也截图展示了 ,里面生成了很多2 。

http://img1.sycdn.imooc.com//climg/5e7b4ab309c5d49010640798.jpg

2.因为同学使用的第二种方法是不能生成2的,所以老师才给你讲解了一个可以生成2的方法。

另外,同学的第二种向上取整方式虽然逻辑上是可以生成2 ,但是Math.random()生成0~10的随机数时,生成的都是随机小数,即生成0的可能性基本上是没有的。所以在这个基础上加2,也几乎没有生成2的可能性。虽然理论在定义随机数,Math.random()是包含0的。但就像老师上次说的,实践大于理论,经过大量的测试,确实是不能生成2 。所以请同学稍安勿躁,耐心按照老师截图的方式,写一个for循环,生成大量的随机数去看一下,以测试为准,再次强调,实践大于理论。

祝学习愉快 !

  • 提问者 慕慕4335856 #1
    好的,明白了,早说这么清楚啊,还以为在敷衍我
    2020-03-25 20:40:12
  • 提问者 慕慕4335856 #2
    不过第一种不用循环,只随机一个数,也没看见刷新出来2,为什么?
    2020-03-25 20:42:47
  • 提问者 慕慕4335856 #3
    我知道了,两个方法放一起看名字也一样,导致第一个结果也没刷到2
    2020-03-25 21:06:40
好帮手慕夭夭 2020-03-25 19:35:45

同学你好,不太理解同学这是如何计算的,虽然从逻辑上看,它应该要输出2 ,但是从输出的结果上看,并没有生成2 ,所以从结果去看这种方式不对,因为没有输出2。这个最好的方式就是写代码测试,实践的结果大于理论。建议同学跳出现在的思维方式,参考如下测试:

1.Math.floor(Math.random() * (m - n + 1) + n) 向下取整 ,根据课程讲过的,如果传入2和6,产生的随机数是2~6。注意是这个公式整体得出了的结果2~6 ,并不是Math.random() * (m - n + 1)这个乘法得出了的,所以不需要最后的结果加上最小数n了。建议测试输出一下:

http://img1.sycdn.imooc.com//climg/5e7b3efc09637a9011230416.jpg

结果如下:

http://img1.sycdn.imooc.com//climg/5e7b4009096d8d6d05620643.jpg

2.如果把上面的公式改为向上取整 ,即Math.ceil(Math.random() * ( m - n + 1) + n) ,随机数的生成范围就是3~7 。这里测试代码就不写了,直接把上面的例子改成ceil方法。

输出结果:

http://img1.sycdn.imooc.com//climg/5e7b40ab092c726d06170682.jpg

所以要用向上取整得出2~6范围的随机数,就在Math.ceil(Math.random() * ( m - n + 1) + n)的基础上减去1。(参考老师上次回复的截图)。

祝学习愉快 !

  • 提问者 慕慕4335856 #1
    老师,你没看见,第一种方法,也没刷新出来2吗? 我这两种方法结果是一模一样的,您到底看没看代码和实现效果啊 逗我呢。。。
    2020-03-25 19:41:53
  • 提问者 慕慕4335856 #2
    两种方法结果是一样的,一样的一样的
    2020-03-25 19:42:49
  • 提问者 慕慕4335856 #3
    所以您好好看看,是怎么回事,是数的范围太小,还是您那能刷新到,是我这浏览器的问题
    2020-03-25 19:44:38
好帮手慕夭夭 2020-03-25 12:13:56

同学你好,第二种方式是不对的。choise要和前面的Math.random()随机小数进行乘法运算。这个不像加法和减法,少加一个1,结果就少一个或者多个1。就像5*4=20 ,那么第二个乘数减去1 为5*3=15 ,结果大不相同。

建议如下修改:

http://img1.sycdn.imooc.com//climg/5e7ada7409df663911950192.jpg

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~

  • 提问者 慕慕4335856 #1
    这是向上取整啊,就是如果第一种方法Math.random()*choise最大结果是6.99999...,然后加上最小数(比如最小数是2),结果就是8.999999... 那么第二种Math.random()*choise结果最大就是5.99999...,然后加上最小数2,结果就是7.999999... 第一种向下取整是结果是6,第二种向上取整结果也是6 Math.random()最大不过1,不可能是5,所以两种的Math.random()*choise最大结果就是差1,分别向下向上取整结果就会一样啊
    2020-03-25 15:42:05
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师