コース一覧
    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 つずつ照らし合わせれば必ず分かります。問題はその先です。見つかったときにどう答えるか、そして最後まで無かったときに何と答えるか。この 2 つを決めないとメソッドは書けません。

    見つけた瞬間にやめる

    まず、見つかったあとの話です。ありがちな失敗が、答えを変数に取っておいてループが終わってから返す書き方です。

    Java

    int[] balances = {120, 45, -30, -80};
    int firstMinus = 0;
    for (int i = 0; i < balances.length; i++) {
        if (balances[i] < 0) {
            firstMinus = balances[i];
        }
    }
    System.out.println(firstMinus); // -80。欲しかったのは -30

    最初にマイナスになった月の残高を知りたいのに、返ってきたのは -80 です。条件に合う要素が 2 つあり、あとから来たほうが firstMinus を上書きしてしまいました。

    欲しいのは最初の 1 件なので、見つけた時点でもう先を見る必要がありません。ループの中に return を書くと、その場でメソッドごと終わります。

    Java

    for (int i = 0; i < balances.length; i++) {
        if (balances[i] < 0) {
            return balances[i]; // ここで終わり。残りは見ない
        }
    }

    break と混同しやすいので整理しておきます。break はループから抜けるだけでメソッドの続きは実行され、return はメソッドごと終わります。最初の 1 件が分かれば用が済む探索では、return のほうが素直です。

    無かったときに返す値を決める

    次に、最後まで見ても見つからなかった場合です。ループを抜けた先にも return を 1 つ置かないと、そもそもコンパイルが通りません。戻り値が int のメソッドは、どの道を通っても必ず値を返す必要があるからです。

    そこで何を返すかは自分で決めます。上の例では 0 にしましたが、これは危うい選択です。残高が本当に 0 円の月があったら、見つからなかったのか 0 円だったのかを、呼び出した側が区別できません。

    見つからなかったことを表す専用の値を 番兵 と呼びます。良い番兵は、本物の答えとして絶対に出てこない値です。

    位置を答えるなら -1

    今回の課題で返すのは、値そのものではなく何番目にあったかです。添字は 0 1 2 と 0 以上の整数しか取らないので、-1 が本物の答えとして現れることはありません。だから見つからなかったの合図に使えます。

    Java

    String title = "Effective Java";
    System.out.println(title.indexOf("Java")); // 10
    System.out.println(title.indexOf("Ruby")); // -1

    String の indexOf も List の indexOf も、同じ理由で -1 を返します。Java に限らず広く使われている約束なので、-1 が返ってきたら無かったと読む癖をつけてください。

    やってみよう

    indexOf(int[] arr, int target) は、target が最初に現れた位置を返し、無ければ -1 を返します。

    • ループの中で返すのは値ではなく位置です。何を return するかに気をつけてください
    • {10, 20, 30, 40} で 10 を探したら答えは 0 です。1 が返るなら、数え始めを間違えています
    • 空の配列を渡しても落ちないはずです。ループが 1 度も回らず、そのまま最後の return に届きます

    要件

    1. クラス名は Solution、メソッド名は indexOf、引数は int[] arr と int target の 2 つにすること
    2. 戻り値の型は int で、target が見つかったら 最初に一致した位置の index を返すこと
    3. 見つからなかった場合は -1 を返すこと (空配列のケースも -1 でよい)

    ヒント

    `for (int i = 0; i < arr.length; i++)` の書き方で、`i` を `0` から `arr.length - 1` まで動かしましょう

    ループの中で `if (arr[i] == target) return i;` を書くと、見つけた瞬間にメソッドごと抜けます。これが「最初に見つかった位置」を返すコツです

    ループを最後まで通ったら、それは見つからなかったということです。ループの後ろに `return -1;` を必ず書きましょう

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

    関連レッスン

    • 拡張 for ループ

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

    • 配列クイズ

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

    • 第 6 章 まとめクイズ

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

    • ArrayList を使う

      Java の代表的な可変長リスト ArrayList の使い方を学び、add で要素を追加して toString で中身を取り出すコードを書いてみよう。

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

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

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

    メモ

    配列の線形探索

    ⌘S で保存