• ベストアンサー

配列を使って平均を求めるプログラムの異常 JavaScript

配列を使って平均を求めるプログラムをJavaScriptで書いているのですが、 実行して得られる平均の値が異常です。(*具体的には後述します) 正しい書き方を教えていただけたら幸いです。 仕様は ・実行と同時にポップアップウインドウで、「生徒1~3」の点数を記入させる ・記入が終わると、ページに生徒の点数と、3人の平均点が表示される というものです。以下がソースです。 var array = new Array(3); var i; array[0] = prompt("生徒1の点数を入力してください。", ""); array[1] = prompt("生徒2の点数をを入力してください。", ""); array[2] = prompt("生徒3の点数を入力してください。", ""); for(i = 0; i < 3; i++){ document.write("生徒 ", i + 1 ); document.write(":", array[i], "<br>"); } var sum = array[0]; for(i = 0; i < 3; i++){ sum += array[i]; var mean = sum/3; } document.write("<hr>"); document.write("平均点: ", mean, "点", "<br>"); *平均値が異常というのは、例えば生徒1に10,生徒2に20,生徒3に30を入力した時の平均点が 3367343.3333333335になってしまう、というようなものです。 原因がわからず困り果てております。 どなたかご親切な方、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>3367343.3333333335 これは"10"+"10"+"20"+"30"、すなわた10102030を3で割った答えですね。 入力された数字は、数値なのか文字なのかjavascriptは判断できません。 とりあえず端数がないなら整数化してやるのが妥当かと。 <script> var array = new Array(3); array[0] = prompt("生徒1の点数を入力してください。", ""); array[1] = prompt("生徒2の点数をを入力してください。", ""); array[2] = prompt("生徒3の点数を入力してください。", ""); for(var i = 0; i < 3; i++){ document.write("生徒 ", i + 1 ); document.write(":", array[i], "<br>"); } var sum = 0; for(i = 0; i < 3; i++){ sum += parseInt(array[i]); } var mean = sum/3; document.write("<hr>"); document.write("平均点: ", mean, "点", "<br>"); </script>

nelimono_
質問者

お礼

ご回答ありがとうございます! おかげさまで無事に正しいプログラムを作ることができました。 文字列を整数化する、という基本的なところを忘れていたのですね。 とっても助かり、そして参考になりました。 ご親切に、どうもありがとうございました。

その他の回答 (1)

noname#108260
noname#108260
回答No.1

一回プログラムの流れを自分で計算とかしてみましたか? まず、合計求める前にarray[0]の値代入してるので0番目は二回足されますね。 あと、ループの中で平均値求める意味ってありますか? 合計求まった後に1回計算すればいいと思うのですが。 とりあえず、値が正しく入っているのかとか地道にデバッグしてください。

nelimono_
質問者

お礼

早速のご回答、どうもありがとうございました! ご厚意に感謝いたします。 >一回プログラムの流れを自分で計算とかしてみましたか? 自分なりに計算してみたんですが、 プログラムへの理解が足りておらず、問題点に気づきませんでした。 >まず、合計求める前にarray[0]の値代入してるので0番目は二回足されますね。 代入の考え方がおかしかったようです。参考になります! >あと、ループの中で平均値求める意味ってありますか? 合計求まった後に1回計算すればいいと思うのですが。 ループを使ってみる練習だったのです。 確かに実際はその通りですね。 >とりあえず、値が正しく入っているのかとか地道にデバッグしてください。 がんばります

関連するQ&A