1. [10,20,30] の中の 20 は index 1
  2. [10,20,30] に 99 は無いので -1
  3. 要素 1 個 [5] の中の 5 は index 0
  4. 先頭にある 10 は index 0
  5. 末尾にある 40 は index 3
  6. 重複がある [10,20,10,20] の 10 は最初の index 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分

配列の線形探索

配列の中に探している値があるかどうかは、前から 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 でよい)

入出力例

indexOf([10,20,30], 20) → 1 indexOf([10,20,30], 99) → -1 indexOf([5], 5) → 0 indexOf([10,20,30,40], 10) → 0 indexOf([10,20,30,40], 40) → 3 indexOf([10,20,10,20], 10) → 0

ヒント

`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・多次元配列・合計平均・最大最小・検索・並べ替え、そして参照型の落とし穴までを総ざらいする章末まとめ。

  • クラスを定義する

    Java の世界の基本単位、クラスを定義する意味と書き方を学ぼう。

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

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

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

メモ

配列の線形探索

⌘S で保存