我在计算1000个随机数的数组的平均值时遇到问题。该数组在1到30之间保存1000个随机数。
我还希望能够计算数组中每个数字的数量,并在频率分布表中打印每个数字的数量。
<script type = "text/javascript">
var arr = [];
function getRandom( num ){
return Math.round(Math.random() * num)+1;
}
for (var i = 0; i < 1000; i++) {
arr.push(getRandom( 30 ));
}
document.write(arr);
document.write("<br/>");
for (var i = 0; i <= 1000; i++){
sum += parseInt(arr[i]);
}
var mean = sum/arr.length;
document.write("The sum of all the elements is: " + sum + " The mean is: " + mean);
</script>
答案 0 :(得分:2)
您不必两次运行循环。随时随地做一切:
var distrTable = {};
for (var i = 0; i < 1000; i++) {
var rnd = getRandom(30);
sum += rnd;
arr.push(rnd);
if (!distrTable[rnd]) {
distrTable[rnd] = 0;
}
distrTable[rnd]++;
}
现在变量包含以下信息:
arr
- 所有随机数。
distrTable
- 每个频率随机数。
sum
- 所有随机数的总和。
答案 1 :(得分:2)
顺便说一下,如果你想知道为什么你的代码不起作用......原因如下:
sum = 0;
for (var i = 0; i < 1000; i++) // not i <= 1000;
然后代码应该可以工作。
答案 2 :(得分:1)
代码中的琐碎错误是,在第二个循环中,您运行的是元素1001而不是元素1000.
由于该元素为undefined
,因此它会导致NaN
和均值之和。
要解决此问题,请将<= 1000
更改为< 1000
您还应该删除parseInt
调用 - 只有在输入值为字符串时才需要,但您的数组已包含数字。
答案 3 :(得分:1)
当你生成这样的随机数时要小心:
function getRandom( num ){
return Math.round(Math.random() * num)+1;
}
...此代码可以生成1到31之间的数字!这是因为Math.round
- 如果Math.random()
生成0.99
,0.99 * 30
将等于29.7
,则将四舍五入为30
,然后将添加1
!
解决方案是将Math.round
替换为Math.floor
。