電子書籍の厳選無料作品が豊富!

配列を使って平均を求めるプログラムを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になってしまう、というようなものです。

原因がわからず困り果てております。
どなたかご親切な方、よろしくお願いします。

A 回答 (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>
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/03/27 17:11

一回プログラムの流れを自分で計算とかしてみましたか?



まず、合計求める前にarray[0]の値代入してるので0番目は二回足されますね。
あと、ループの中で平均値求める意味ってありますか?
合計求まった後に1回計算すればいいと思うのですが。

とりあえず、値が正しく入っているのかとか地道にデバッグしてください。
    • good
    • 0
この回答へのお礼

早速のご回答、どうもありがとうございました!
ご厚意に感謝いたします。

>一回プログラムの流れを自分で計算とかしてみましたか?

自分なりに計算してみたんですが、
プログラムへの理解が足りておらず、問題点に気づきませんでした。

>まず、合計求める前にarray[0]の値代入してるので0番目は二回足されますね。

代入の考え方がおかしかったようです。参考になります!

>あと、ループの中で平均値求める意味ってありますか?
合計求まった後に1回計算すればいいと思うのですが。

ループを使ってみる練習だったのです。
確かに実際はその通りですね。

>とりあえず、値が正しく入っているのかとか地道にデバッグしてください。

がんばります

お礼日時:2010/03/27 17:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!