コース一覧
    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分

    配列の最大値

    変数の中身を追う

    配列を目で見れば、いちばん大きい数は一目で分かります。でもプログラムは配列を一望できません。前から 1 つずつしか見られない相手に、どうやって全体の中の一番を答えさせるかが今回の問題です。

    途中経過を 1 つだけ持ち歩く

    やり方は勝ち抜き戦と同じです。今のチャンピオンを 1 人だけ覚えておいて、より強い相手が現れたら王座を明け渡す。配列を最後まで見終わったとき、手元に残っているのが優勝者です。

    最小値を探す例で見てみます。3 日分の最低気温から、いちばん寒かった日の気温を出します。

    Java

    int[] temps = {-3, -8, -1};
    int min = temps[0];
    for (int i = 1; i < temps.length; i++) {
        if (temps[i] < min) {
            min = temps[i];
        }
    }
    System.out.println(min); // -8

    min は、ここまでで一番小さかった値を入れておくための変数です。ループの中でやっているのは、今見ている temps[i] と min を比べて、記録が更新されたときだけ書き換える、それだけです。

    i が 1 から始まっているのは、temps[0] はもう min に入っているからです。0 から回しても答えは変わりませんが、自分と自分を比べる 1 周が無駄になります。

    初期値を 0 にすると嘘をつく

    いま min の初期値に temps[0] を使いました。ここを 0 から始めてはいけません。

    Java

    int[] scores = {72, 85, 60};
    int min = 0;                     // 配列に存在しない値から始めてしまった
    for (int i = 0; i < scores.length; i++) {
        if (scores[i] < min) {
            min = scores[i];
        }
    }
    System.out.println(min);         // 0。60 ではない

    72 も 85 も 60 も 0 より大きいので、更新が一度も起きません。結果、配列のどこにも入っていない 0 が答えとして返ってきます。

    初期値は、必ず配列の中に実在する値から取ります。先頭の要素を使えば、それが保証されます。

    先頭の要素が無い配列

    初期値を先頭から取ると決めた瞬間に、気をつけることが 1 つ増えます。

    Java

    int[] empty = {};
    int min = empty[0]; // ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0

    要素が 1 つも無い配列では、empty[0] を読んだ瞬間に落ちます。前回の 0 除算と同じで、これも入り口で引き返す話です。長さを確かめてから先頭を取りにいく、という順番を守ってください。

    やってみよう

    arrayMax は int[] から最大値を返します。上の最小値の例と違うのは、比べる向きだけです。

    • 空の配列のときは 0 を返します。先頭の要素に触る前に長さを確かめること
    • {-1, -5, -3} を渡して -1 が返るか必ず試してください。ここで 0 が返るなら、初期値の取り方を間違えています
    • {42} のような要素 1 つだけの配列でも試しておきましょう。ループが 1 度も回らなくても答えが出る形になっていれば正解です

    要件

    1. クラス名は Solution、メソッド名は arrayMax、引数は int[] arr ひとつにすること
    2. 戻り値の型は int で、配列の中の最大値を返すこと
    3. 配列が空 (arr.length == 0) のときは 0 を返し、負の数だけの配列でも正しく動くこと

    ヒント

    まず `if (arr.length == 0) return 0;` で空配列ガードを書きましょう。これがないと次の `arr[0]` で `ArrayIndexOutOfBoundsException` が出ます

    仮の最大値 `max` は `arr[0]` で初期化するのが安全です。`0` で初期化すると、全要素がマイナスの配列で答えがズレます

    ループは `for (int i = 1; i < arr.length; i++)` で回し、中身は `if (arr[i] > max) max = arr[i];` で更新します。`for-each` の `for (int v : arr)` で書いてもかまいません

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

    関連レッスン

    • 配列の線形探索

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

    • 拡張 for ループ

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

    • 配列クイズ

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

    • 第 6 章 まとめクイズ

      第 6 章「配列」で学んだ宣言・初期化・添字アクセス・length・拡張 for・多次元配列・合計平均・最大最小・検索・並べ替え、そして参照型の落とし穴までを総ざらいする章末まとめ。

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

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

    • 配列サイズ固定の同型データの集まり
    • 変数データに名前をつけて参照する仕組み
    • ループ繰り返し処理。矢印で戻すか専用記号で示す
    • クラスデータと振る舞いを束ねる単位
    • メソッドクラスに属する関数
    • 引数位置引数=順番で渡す。
    • 戻り値呼び出し元への返答を表す点線矢印
    main.java
    エディタを読み込んでいます

    メモ

    配列の最大値

    ⌘S で保存