-2

我无法计算 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>
4

4 回答 4

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

于 2013-09-01T16:51:49.600 回答
2

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

  1. 首先定义变量sum。在循环之前放sum = 0;
  2. 其次,虽然数组很长 1000 个项目,但在第二个中为您循环了 1001 次。声明应如下所示:

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

然后代码应该可以工作。

于 2013-09-01T16:55:07.897 回答
1

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

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

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

您还应该删除parseInt调用 - 仅当您的输入值是strings时才需要这样做,但您的数组已经包含数字。

于 2013-09-01T16:54:24.563 回答
1

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

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

...此代码可以生成从 1 到 31 的数字!这是因为Math.round--if Math.random()generate 0.99, 0.99 * 30will equal 29.7,将四舍五入为30,然后1相加!

解决方案是替换Math.roundMath.floor.

于 2013-09-01T16:56:29.723 回答