1. [4, 6] の平均は 5.0
  2. [2, 2, 2] の平均は 2.0
  3. 空配列の平均は 0.0
  4. [10, 20, 30, 40] の平均は 25.0
コース一覧
Java入門:基礎文法編
配列の平均

Java入門:基礎文法編

変数、制御構文、メソッド、クラス、継承、インターフェースなど Java とオブジェクト指向の基礎を、コードを書きながら学べる無料コースです。プログラミング初学者や、業務システム開発で Java を扱う必要がある社会人を対象としています。約 17 時間 (1 日 30 分 × 34 日) で 69 レッスンを修了でき、修了後は Spring などのフレームワーク学習や Java 認定試験への準備が無理なく進められます。

1
Hello, Java
01. はじめての Java プログラム5分
02. 複数行の出力5分
03. 変数を使った自己紹介5分
04. コメントを書く5分
05. 第 1 章まとめクイズ5分
2
変数と演算
01. 変数を宣言する5分
02. データ型の使い分け5分
03. 変数とデータ型クイズ5分
04. 四則演算と剰余5分
05. 税込価格を計算する5分
06. インクリメントとデクリメント5分
07. 比較演算子5分
08. 論理演算子5分
09. 演算子の優先順位5分
10. 文字列の連結5分
11. 型変換 (キャスト)5分
12. 第 2 章 まとめクイズ5分
3
条件分岐
01. if 文の基本5分
02. if-else 文5分
03. else if で複数分岐5分
04. 成績判定プログラム12分
05. うるう年を判定する5分
06. switch 文5分
07. 三項演算子5分
08. じゃんけんの勝敗判定15分
09. FizzBuzz の判定部分5分
10. 第 3 章 まとめクイズ5分
4
繰り返し
01. for 文の基本5分
02. 1 から N までの合計5分
03. 九九の段を作る5分
04. while 文5分
05. カウントダウン5分
06. do-while 文5分
07. 二重ループ5分
08. break と continue5分
09. FizzBuzz 完成5分
10. 繰り返しクイズ5分
11. 第 4 章 まとめクイズ5分
5
メソッド
01. メソッドを定義する5分
02. 引数を受け取るメソッド5分
03. 戻り値を返す5分
04. 複数の引数を取るメソッド5分
05. メソッドのオーバーロード5分
06. メソッドクイズ5分
07. BMI を計算するメソッド5分
08. 第 5 章 まとめクイズ5分
6
配列
01. 配列の基本5分
02. 配列の要素にアクセス5分
03. 配列を for で走査5分
04. Javaで配列の合計・平均を求める方法(forループ)5分
05. 配列の平均5分
06. 配列の最大値5分
07. 配列の線形探索12分
08. 拡張 for ループ5分
09. 配列クイズ5分
10. 第 6 章 まとめクイズ5分
7
クラスとオブジェクト
01. クラスを定義する5分
02. クラスにフィールドを持たせる12分
03. クラスにメソッドを定義する5分
04. インスタンスを作る5分
05. コンストラクタ5分
06. this キーワード5分
07. カプセル化 (private と getter)12分
08. Person クラスを作る5分
09. Product クラスで税込価格15分
10. 銀行口座クラス15分
11. toString のオーバーライド5分
12. クラスとオブジェクト クイズ5分
13. Java 入門 最終クイズ5分

配列の平均

合計までは出せるようになりました。ところが 3 点と 4 点の平均を出そうとすると、画面に出るのは 3.5 ではなく 3.0 です。式は合っているのに答えだけ違う、という一番気持ちの悪い種類のバグです。

3.5 が 3.0 になる

原因は割り算そのものにあります。Java では int どうしの割り算の結果も int になります。小数点以下は四捨五入ではなく切り捨てです。

Java

int total = 7; int count = 2; double avg = total / count; System.out.println(avg); // 3.0

double avg と受け皿を小数にしても手遅れです。右辺の total / count は int どうしなので、先に 3 が確定します。そのあと double に入れ直しても、消えた 0.5 は戻ってきません。

割り算をする前に小数にしておく

直し方は、割る前に片方を double に変えておくことです。型の変換をその場で命じる書き方を キャスト と呼び、変えたい型を丸カッコで包んで値の手前に置きます。

Java

int total = 7; int count = 2; System.out.println((double) total / count); // 3.5 System.out.println((double) (total / count)); // 3.0

上と下で結果が変わるのは、キャストの位置が違うからです。上は total だけを 7.0 に変えてから割っています。片方が double になると、もう片方も自動で double に引き上げられるので、答えも小数のままです。下は丸カッコの中の int どうしの割り算が先に終わってしまい、切り捨て済みの 3 を小数にしているだけです。

意味があるのは割り算より前に置いたキャストだけ、と覚えてください。

0 で割ると、そこで止まる

もうひとつ、割り算には落ちどころがあります。分母が 0 のときです。

Java

int total = 7; int people = 0; System.out.println(total / people); // ArithmeticException: / by zero

int の割り算で分母が 0 になると、ArithmeticException が投げられてプログラムはその場で止まります。1 件もデータが無いのに平均を出そうとしたときに、これが起きます。

防ぎ方は、割り算にたどり着く前に引き返すことです。

Java

if (people == 0) { System.out.println("対象がいないので計算できません"); return; }

このように、おかしな入力をメソッドの入り口で弾いて先へ進ませない書き方を ガード節 と呼びます。処理の本体が if の入れ子で深くならないので、読みやすさの面でも得をします。

やってみよう

arrayAvg は int[] を受け取って平均を double で返すメソッドです。作る順番は次のとおりです。

  1. 要素が 1 つも無いときにここから先へ進ませないガード節を、メソッドの先頭に置く。このときの戻り値は 0.0 と決まっています
  2. 前回と同じ要領で、ループを回して合計を作る
  3. 合計を要素数で割る。キャストを置く位置を間違えないこと

書けたら {4, 7} を渡してみてください。5.5 が返れば、キャストが正しい位置に入っています。5.0 が返ったら、丸カッコが割り算全体を包んでしまっていないか見直しましょう。

要件

  1. クラス名は Solution、メソッド名は arrayAvg で、引数は int[] arr、戻り値は double
  2. 空配列 (arr.length == 0) のときは 0.0 を返すこと (0 除算しない)
  3. 割り算は (double) sum / arr.length のように double にキャストしてから行い、整数除算にならないようにすること

入出力例

arrayAvg([4,6]) → 5 arrayAvg([2,2,2]) → 2 arrayAvg([]) → 0 arrayAvg([10,20,30,40]) → 25

ヒント

メソッドの冒頭に `if (arr.length == 0) return 0.0;` を入れて、空配列のときの 0 除算を避けましょう

`for (int i = 0; i < arr.length; i++) { sum = sum + arr[i]; }` で合計を作るのが基本形です。`for (int v : arr) { sum += v; }` の拡張 for 文でも OK

`return (double) sum / arr.length;` のように、割り算の **前** に `(double)` でキャストするのがポイント。`(double)(sum / arr.length)` だと先に整数除算が走ってしまうので NG です

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

関連レッスン

  • 配列の最大値

    配列の中から一番大きい値を探そう。仮の最大値を更新していくアルゴリズムを身につける。

  • 配列の線形探索

    配列を先頭から順番に見ていき、目的の値があれば位置 (index) を、なければ -1 を返す線形探索アルゴリズムを書こう。

  • 拡張 for ループ

    配列の中身を頭から順番にぜんぶ見たいときに最適な、拡張 for (for-each) 文の書き方と使いどころを学ぼう。

  • 配列クイズ

    配列の宣言と初期化、`length` プロパティ、添字の上限、拡張 for と通常 for の使い分けを 4 択クイズ 1 問で総ざらいする配列章末まとめ。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • instanceof「このオブジェクトの実際の型は何か」を確認 → 安全に変換
  • メソッドクラスに属する関数
  • 処理計算や代入を表す長方形
  • 戻り値呼び出し元への返答を表す点線矢印
  • ループ繰り返し処理。矢印で戻すか専用記号で示す
  • 素数1 と自分自身でしか割り切れない自然数
  • クラスデータと振る舞いを束ねる単位
  • 引数位置引数=順番で渡す。
main.java
学習モード
エディタを読み込んでいます

メモ

配列の平均

⌘S で保存