2次元配列を使った成績集計のサンプルです。
class ScoreAvg { public static void main( String[] args ) { int[][] score = { { 87, 78, 91 } , { 86, 67, 89 } , { 78, 82, 90 } , { 65, 55, 71 } , { 69, 82, 88 } }; // (1) 学生ごとの平均点を求める for( int i = 0; i < score.length; i++ ) { int sum = 0; for( int j = 0; j < score[i].length; j++ ) sum += score[i][j]; System.out.println( i+1 + "番目の学生の平均点は " + (double)sum/score[i].length ); } // (2) 教科ごとの平均点を求める for( int j = 0; j < score[0].length; j++ ) { int sum = 0; for( int i = 0; i < score.length; i++ ) sum += score[i][j]; System.out.println( j+1 + "番目の教科の平均点は " + (double)sum/score.length ); } } }
(1) は、学生の各行について列方向にすべての教科の点数を足し、列数つまり教科の数で割って平均を求めます。
(2) は、教科の各列について行方向に学生全員の点数を足し算し、最後に平均を求めるために 行数つまり学生数で割ります。
int[][] score = { { 87, 78, 91 } , { 86, 67, 89, 100 } , { 78, 82, 90 } , { 65, 55, 71, 100, 100 } , { 69, 82, 88 } };score[1] は要素数が4つの配列、score[3] は要素数が5つの配列です。score は、それらの配列をまとめた配列です。
上のプログラムでは、(1) は各行の要素数が異なる場合にも対応しています。
(2) は、一番上の配列の要素数 score[0].length を教科の数として使用しています。
厳密な対応ではありませんが、上のプログラムでは学生ごとの教科の数が異なると、集計自体が意味のないものになります。
(今回のクイズです)
上のプログラムで、初期化で設定した点数を代入文で変更します。
最後の学生の最後の科目の点数 88 を 90 にするには、どんな代入文を書けばよいですか?
(答えは、次回の Java の Tips で ・・・)
[ 関連記事 ] 2次元配列の初期化とメソッドへの受け渡し
1:Milk 2: Eggs 3: Bread 4: Apple 5: Cheese厳密に指定した区切り文字(,)で分割するので、空白文字も特別扱いされません。