004-003-009

配列のインデックス操作を理解する

上級

問題説明

配列のインデックス操作:安全な要素アクセス

配列のインデックス操作はデータコレクションを扱う基本です。ゼロベースのインデックスと境界条件を理解することで、最も一般的な実行時エラーの一つであるArrayIndexOutOfBoundsExceptionを防げます。

一緒にインデックス操作を学んでいきましょう!

学習目標

  • 配列インデックスの計算と動的アクセスを適用できる
  • 式を使ったインデックス指定による要素アクセスを実装できる
  • インデックス操作の仕組みとArrayIndexOutOfBoundsExceptionの関係を説明できる

学習ポイント

  • ゼロベースインデックス: 最初の要素はインデックス0(1ではない)
  • 有効範囲: 0からlength - 1(両端含む)
  • 最後の要素: 常にarray[array.length - 1]
  • 境界例外: 無効なインデックスアクセスで実行時エラー

インデックスの基本

要素アクセス5要素配列の場合
最初array[0]インデックス0
2番目array[1]インデックス1
中間array[length/2]インデックス2
最後array[length-1]インデックス4

よくある間違い

間違えても大丈夫です。もう一度インデックスの範囲を確認してみてください。

間違い1: オフバイワンエラー

誤ったコード:

int[] arr = {10, 20, 30};
int last = arr[arr.length];  // ArrayIndexOutOfBoundsException!
// arr.lengthは3だが、有効なインデックスは0, 1, 2

正しいコード:

int last = arr[arr.length - 1];  // 正解: インデックス2

間違い2: 負のインデックス

誤ったコード:

int[] arr = {10, 20, 30};
int val = arr[-1];  // ArrayIndexOutOfBoundsException!
// JavaはPythonのような負のインデックスをサポートしない

間違い3: 空配列へのアクセス

誤ったコード:

int[] arr = new int[0];  // 空配列
int first = arr[0];  // ArrayIndexOutOfBoundsException!

安全なコード:

if (arr.length > 0) {
    int first = arr[0];  // 安全なアクセス
}

安全なアクセスパターン

// アクセス前にチェック
if (index >= 0 && index < array.length) {
    value = array[index];
}

// 安全な最初/最後の要素アクセス
int first = array.length > 0 ? array[0] : defaultValue;
int last = array.length > 0 ? array[array.length - 1] : defaultValue;

実務での活用

  • ループ反復: i < array.lengthを条件に使用
  • 二分探索: 中点を(low + high) / 2で計算
  • スライディングウィンドウ: 開始と終了インデックスを追跡
  • 循環バッファ: 剰余index % lengthを使用

補足: 特にインデックスがユーザー入力や計算から来る場合は、アクセス前に必ずインデックスを検証してください。

前提知識の詳細説明

この問題を解くために必要な知識を確認しましょう。

基本概念

この問題で扱うプログラミングの基本概念を理解することが、正しい解答への第一歩です。コードの各要素がどのように連携して動作するかを把握しましょう。

実装アプローチ

問題を解くための考え方を段階的に整理します:

  1. 問題文を読み、入力と出力の関係を理解する
  2. 必要な変数やデータ構造を特定する
  3. 処理の流れを組み立てる
  4. テストケースで動作を確認する

コードを実行してみませんか?

この問題のコードエディタと実行機能を使用するには、ログインしてください。

アカウントをお持ちでない方