コース一覧
    Java入門:配列とコレクション
    配列の平均

    Java入門:配列とコレクション

    配列とコレクションの扱いを学び、複数のデータを安全に整理・検索・集計できるようにします。

    1
    配列
    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分
    2
    コレクション基礎
    01. ArrayList を使う5分
    02. List を走査する5分
    03. 要素の削除と検索5分
    04. HashMap の基本5分
    05. Map を走査する5分
    06. Set で重複を排除5分
    07. Collections クラスの便利メソッド5分
    08. コレクション基礎 まとめクイズ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 にキャストしてから行い、整数除算にならないようにすること

    ヒント

    メソッドの冒頭に `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 で保存