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

时间:2013-09-01 16:47:30

标签: javascript arrays

我在计算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>

4 个答案:

答案 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 - 所有随机数的总和。

jsFiddle example

答案 1 :(得分:2)

顺便说一下,如果你想知道为什么你的代码不起作用......原因如下:

  1. 首先定义变量sum。在循环之前,只需添加sum = 0;
  2. 第二,虽然数组是长1000项,但在第二个为你循环1001次。声明应如下:
  3. 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.990.99 * 30将等于29.7,则将四舍五入为30,然后将添加1

解决方案是将Math.round替换为Math.floor