这里是两个方法
第二个是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
同学你好,问题解答如下:
1.请同学再着重看一下第一种方法,是可以生成2的。在上一次回答中,也截图展示了 ,里面生成了很多2 。
2.因为同学使用的第二种方法是不能生成2的,所以老师才给你讲解了一个可以生成2的方法。
另外,同学的第二种向上取整方式虽然逻辑上是可以生成2 ,但是Math.random()生成0~10的随机数时,生成的都是随机小数,即生成0的可能性基本上是没有的。所以在这个基础上加2,也几乎没有生成2的可能性。虽然理论在定义随机数,Math.random()是包含0的。但就像老师上次说的,实践大于理论,经过大量的测试,确实是不能生成2 。所以请同学稍安勿躁,耐心按照老师截图的方式,写一个for循环,生成大量的随机数去看一下,以测试为准,再次强调,实践大于理论。
祝学习愉快 !
同学你好,不太理解同学这是如何计算的,虽然从逻辑上看,它应该要输出2 ,但是从输出的结果上看,并没有生成2 ,所以从结果去看这种方式不对,因为没有输出2。这个最好的方式就是写代码测试,实践的结果大于理论。建议同学跳出现在的思维方式,参考如下测试:
1.Math.floor(Math.random() * (m - n + 1) + n) 向下取整 ,根据课程讲过的,如果传入2和6,产生的随机数是2~6。注意是这个公式整体得出了的结果2~6 ,并不是Math.random() * (m - n + 1)这个乘法得出了的,所以不需要最后的结果加上最小数n了。建议测试输出一下:
结果如下:
2.如果把上面的公式改为向上取整 ,即Math.ceil(Math.random() * ( m - n + 1) + n) ,随机数的生成范围就是3~7 。这里测试代码就不写了,直接把上面的例子改成ceil方法。
输出结果:
所以要用向上取整得出2~6范围的随机数,就在Math.ceil(Math.random() * ( m - n + 1) + n)的基础上减去1。(参考老师上次回复的截图)。
祝学习愉快 !
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星