查找1000个随机整数的数组的平均值javascript



我在计算1000个随机数数组的平均值时遇到了问题。该数组包含1000个介于1和30之间的随机数。

我还希望能够计算数组中每个数字的数量,并在频率分布表中打印每个数字的量。

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

您不必运行两次循环。在飞行中做每件事:

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——所有随机数之和。

jsFiddle示例

顺便说一句,如果你想知道为什么你的代码不工作。。。原因如下:

  1. 首先定义变量和。循环之前只放入sum = 0;
  2. 第二,当数组长1000个项目时,在第二个循环中为您循环1001次。声明应如下:

for (var i = 0; i < 1000; i++) // not i <= 1000;

那么代码应该可以工作了。

代码中的一个小错误是,在第二个循环中,您运行的是元素1001,而不是元素1000。

由于该元素是undefined,因此它同样导致NaN和平均值的和。

要修复,请将<= 1000更改为仅< 1000

您还应该删除parseInt调用——只有当您的输入值是字符串,但您的数组已经包含数字时,这才是必要的。

生成这样的随机数时要小心:

function getRandom( num ){
     return Math.round(Math.random() * num)+1;
}

这个代码可以生成从1到31的数字!这是因为Math.round——如果Math.random()生成0.990.99 * 30将等于29.7,四舍五入到30,然后添加1

解决方案是用Math.floor代替Math.round

相关内容

  • 没有找到相关文章

最新更新