下記の内容のcsvファイルを読み込んで教科ごとの平均点を求めるプログラムを作りました。

#生徒番号,国語,数学,英語
10101,80,70,90
10102,90,50,80
10103,70,70,90
10104,100,100,100
10105,60,100,80
10106,80,80,70


ここで、エラーが出ました。悩んだのは2点。Array.newとcsvの読み込みです。


まず、
Array.newの使い方を間違えました。私はArray.newを使って初期化したかったので、

ARRAY_NUM = 3
a = Array.new(ARRAY_NUM, "")

上記のように書いたのですが、こうすると

=> ["", "", ""]

こんな配列ができます。初期化はしたいけど、a=["", "", ""]は意図していません。

a = Array.new

こうすることで配列としてaを初期化できます。

そしてもうひとつ。
csvファイルから読み込んだ数字を配列に格納します。
格納された数字は教科ごとに平均を出します。

average = Array.new(ARRAY_NUM, "")
0.upto(line_num) do |i|
	average[JAPANESE] += a[i][JAPANESE]
	average[MATH] += a[i][MATH]
	average[ENGLISH] += a[i][ENGLISH]
end

	average[JAPANESE] /= line_num
	average[MATH] /= line_num
	average[ENGLISH] /= line_num

ここで、csvファイルから読み込んだ数字は文字型です。なので、文字型から数値へ変換する必要があります。Intergerを使うと

average = Array.new(ARRAY_NUM, 0)
0.upto(line_num - 1) do |i|
	average[JAPANESE] += Integer(a[i][JAPANESE])
	average[MATH] += Integer(a[i][MATH])
	average[ENGLISH] += Integer(a[i][ENGLISH])
end

	average[JAPANESE] /= line_num
	average[MATH] /= line_num
	average[ENGLISH] /= line_num

Array.newを理解しきれていなかったと数値型の変換をすっかり忘れていたのが原因でした。