-2

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

4 に答える 4

2

ところで、なぜコードが機能しないのか疑問に思っている場合は...理由は次のとおりです。

  1. まず、変数 sum を定義します。ループの前にsum = 0;
  2. 第二に、配列は 1000 個のアイテムを含みますが、2 番目の for you は 1001 回ループします。宣言は次のようにする必要があります。

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

その後、コードが機能するはずです。

于 2013-09-01T16:55:07.897 に答える
2

サイクルを 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 に答える
1

コードの些細なエラーは、2 番目のループで要素 1000 ではなく要素 1001 まで実行していることです。

その要素はであるため、同様undefinedに と の合計が発生します。NaN

修正するには、<= 1000を justに変更します< 1000

呼び出しも削除する必要があります。これparseIntは、入力値がstringであるが、配列に既に数値が含まれている場合にのみ必要です。

于 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 equal29.7が に丸められてから30追加1されるためです!

解決策は、に置き換えることMath.roundですMath.floor

于 2013-09-01T16:56:29.723 に答える