Java の配列のインデックスとは?添え字とは?要素を取得する方法を解説!
新人
「Java の配列のインデックスって何ですか?どうやって使うんですか?」
先輩
「インデックスは、配列の中の要素を管理するための番号のことだよ。配列の要素を取得したり変更したりするときに使うんだ。」
新人
「インデックスはどこから始まるんですか?」
先輩
「Java の配列のインデックスは 0 から始まるよ。だから、一番最初の要素はインデックス 0 で、次が 1、その次が 2 という感じになるんだ。」
新人
「なるほど!じゃあ、具体的な例を見てみたいです。」
先輩
「それじゃあ、配列のインデックスについて詳しく解説していこう!」
1. 配列のインデックスとは?(基本的な説明)
Java の配列は、複数のデータを 1 つの変数で管理することができる便利な仕組みです。配列の要素には「インデックス」という番号が割り振られており、これを使って要素を取得したり、値を変更したりできます。
配列のインデックスの基本
Java の配列のインデックスは 0 から始まります。つまり、配列の最初の要素はインデックス 0、次が 1、その次が 2 というようになります。
public class ArrayIndexExample {
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
System.out.println("インデックス 0 の値: " + numbers[0]);
System.out.println("インデックス 1 の値: " + numbers[1]);
System.out.println("インデックス 2 の値: " + numbers[2]);
System.out.println("インデックス 3 の値: " + numbers[3]);
System.out.println("インデックス 4 の値: " + numbers[4]);
}
}
インデックス 0 の値: 10
インデックス 1 の値: 20
インデックス 2 の値: 30
インデックス 3 の値: 40
インデックス 4 の値: 50
このように、配列の要素にアクセスするときは、配列名[インデックス] の形で指定します。
2. 配列の要素を取得する方法(基本の書き方)
Java で配列の要素を取得するには、インデックスを使います。インデックスを指定することで、特定の位置にあるデータを取得することができます。
配列の要素を取得する基本の書き方
public class ArrayElementAccess {
public static void main(String[] args) {
String[] fruits = {"りんご", "みかん", "ぶどう", "バナナ", "もも"};
System.out.println("最初の果物: " + fruits[0]);
System.out.println("3番目の果物: " + fruits[2]);
}
}
最初の果物: りんご
3番目の果物: ぶどう
このように、配列のインデックスを指定することで、特定の要素を取得することができます。
注意:存在しないインデックスを指定するとエラーになる
配列の範囲外のインデックスを指定すると、ArrayIndexOutOfBoundsException というエラーが発生します。
public class ArrayOutOfBoundsExample {
public static void main(String[] args) {
int[] numbers = {10, 20, 30};
// 存在しないインデックスを指定
System.out.println(numbers[3]); // エラー
}
}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
配列のインデックスは 0 から始まり、最大のインデックスは 配列の長さ - 1 となります。
3. 配列の長さとインデックスの関係(範囲外エラーの注意点)
Java の配列は、あらかじめ決められた要素数(長さ)を持ちます。そのため、配列の長さを超えるインデックスを指定するとエラーが発生します。
配列の長さを取得する方法
配列の長さは、length プロパティを使うことで取得できます。
public class ArrayLengthExample {
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
System.out.println("配列の長さ: " + numbers.length);
}
}
配列の長さ: 5
範囲外のインデックスを指定するとエラーが発生
配列のインデックスの範囲は 0 から 配列の長さ - 1 までです。それを超えるインデックスを指定すると、ArrayIndexOutOfBoundsException というエラーが発生します。
public class ArrayOutOfBoundsExample {
public static void main(String[] args) {
int[] numbers = {10, 20, 30};
System.out.println(numbers[3]); // エラー
}
}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
このようなエラーを防ぐためには、インデックスを指定する前に配列の長さを確認すると安全です。
4. for 文を使ってすべての要素を取得する方法
配列のすべての要素を取得するには、for 文を使うのが便利です。
for 文を使って配列のすべての要素を取得
public class ArrayLoopExample {
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
for (int i = 0; i < numbers.length; i++) {
System.out.println("インデックス " + i + " の値: " + numbers[i]);
}
}
}
インデックス 0 の値: 10
インデックス 1 の値: 20
インデックス 2 の値: 30
インデックス 3 の値: 40
インデックス 4 の値: 50
拡張 for 文を使う方法
Java には 拡張 for 文(for-each) という便利な書き方もあります。インデックスを意識せずに、配列のすべての要素を取得できます。
public class EnhancedForExample {
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
for (int num : numbers) {
System.out.println("値: " + num);
}
}
}
値: 10
値: 20
値: 30
値: 40
値: 50
拡張 for 文は、インデックスを使わずに配列の要素を取り出すことができるので、コードがすっきりします。
5. 配列の最後の要素を取得する方法
配列の最後の要素を取得するには、配列の長さを利用すると便利です。
配列の最後の要素を取得する基本
配列の最後の要素は、配列名[配列の長さ - 1] で取得できます。
public class LastElementExample {
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
System.out.println("最後の要素: " + numbers[numbers.length - 1]);
}
}
最後の要素: 50
配列が空の場合のエラーを防ぐ
配列が空の場合に最後の要素を取得しようとすると、エラーが発生します。それを防ぐためには、事前に配列の長さをチェックするのが安全です。
public class SafeLastElementExample {
public static void main(String[] args) {
int[] numbers = {};
if (numbers.length > 0) {
System.out.println("最後の要素: " + numbers[numbers.length - 1]);
} else {
System.out.println("配列が空です。");
}
}
}
配列が空です。
このようにして、配列が空の場合でも安全にプログラムを実行できます。
6. 逆順に要素を取得する方法(for 文を応用)
Java の配列では、通常は 0 から順番に要素を取得しますが、逆順に要素を取得することもできます。
逆順に取得する方法
for 文を使って、インデックスを大きい順に減らしていけば、配列の要素を逆順に取得できます。
public class ReverseArrayExample {
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
for (int i = numbers.length - 1; i >= 0; i--) {
System.out.println("インデックス " + i + " の値: " + numbers[i]);
}
}
}
インデックス 4 の値: 50
インデックス 3 の値: 40
インデックス 2 の値: 30
インデックス 1 の値: 20
インデックス 0 の値: 10
このように、for 文を使って i を減らしていくことで、配列を逆順に処理できます。
7. 配列の特定の値を検索する方法(線形探索)
Java では、配列の中から特定の値を探すために、線形探索(リニアサーチ) を使うことができます。
線形探索の基本
線形探索では、配列の先頭から順番に値を調べていきます。
public class LinearSearchExample {
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
int target = 30; // 探したい値
boolean found = false;
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] == target) {
System.out.println("値 " + target + " はインデックス " + i + " にあります。");
found = true;
break;
}
}
if (!found) {
System.out.println("値 " + target + " は見つかりませんでした。");
}
}
}
値 30 はインデックス 2 にあります。
このように、配列を最初から順番に調べて、目的の値が見つかったら処理を終了させます。
8. 練習問題:「インデックスを使った配列の基本操作」
配列のインデックスを使った基本操作を学ぶために、次のようなプログラムを作ってみましょう。
問題1:配列の逆順表示
以下の配列を逆順に表示するプログラムを作成してください。
int[] numbers = {1, 2, 3, 4, 5};
解答例
public class ReverseArrayPractice {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5};
for (int i = numbers.length - 1; i >= 0; i--) {
System.out.print(numbers[i] + " ");
}
}
}
5 4 3 2 1
問題2:配列内の最大値を見つける
以下の配列の中から最大の値を見つけて表示するプログラムを作成してください。
int[] numbers = {12, 45, 67, 23, 89, 34};
解答例
public class FindMaxValue {
public static void main(String[] args) {
int[] numbers = {12, 45, 67, 23, 89, 34};
int max = numbers[0];
for (int i = 1; i < numbers.length; i++) {
if (numbers[i] > max) {
max = numbers[i];
}
}
System.out.println("配列の最大値: " + max);
}
}
配列の最大値: 89
問題3:特定の値のインデックスを検索
以下の配列の中から、指定した値が何番目にあるかを調べるプログラムを作成してください。
int[] numbers = {3, 8, 15, 27, 42, 55};
int target = 27;
解答例
public class SearchArrayIndex {
public static void main(String[] args) {
int[] numbers = {3, 8, 15, 27, 42, 55};
int target = 27;
int index = -1;
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] == target) {
index = i;
break;
}
}
if (index != -1) {
System.out.println("値 " + target + " はインデックス " + index + " にあります。");
} else {
System.out.println("値 " + target + " は配列にありません。");
}
}
}
値 27 はインデックス 3 にあります。
これらの問題に挑戦することで、Java の配列のインデックスをより深く理解することができます。
まとめ
配列のインデックスを理解するとJavaの基礎力が一気に安定する
今回の記事では、Javaの配列におけるインデックス、いわゆる添え字の考え方と、要素を取得する基本的な方法について詳しく学びました。Javaの配列は、複数のデータを一つにまとめて扱える非常に重要な仕組みであり、その中心となるのがインデックスです。インデックスを正しく理解できていないと、配列操作でエラーが発生しやすくなり、プログラム全体の動作も不安定になってしまいます。
Javaの配列のインデックスは必ずゼロから始まります。この「ゼロ始まり」というルールは、Javaだけでなく多くのプログラミング言語で採用されていますが、初心者の方が最初につまずきやすいポイントでもあります。配列の最初の要素がインデックスゼロ、二番目がインデックス一、という対応関係を頭の中でしっかり結びつけることが大切です。
配列名とインデックスを組み合わせることで要素を自由に扱える
配列の要素を取得する際は、「配列名[インデックス]」という書き方を使います。この基本構文を覚えることで、数値の配列や文字列の配列など、さまざまなデータを自在に取り出せるようになります。今回のサンプルでは、整数の配列や果物の名前を格納した文字列配列を使い、インデックスによって特定の要素を取得しました。
実際のプログラムでは、配列の中身を一つずつ表示したり、条件に応じて特定の要素を使ったりする場面が頻繁に登場します。そのたびにインデックスを使って要素にアクセスするため、配列とインデックスの関係を理解しているかどうかが、Javaプログラミングの理解度を大きく左右します。
インデックスの範囲外アクセスがエラーを引き起こす理由
記事の中でも触れたように、存在しないインデックスを指定すると、ArrayIndexOutOfBoundsExceptionという実行時エラーが発生します。これは、Javaが安全にプログラムを動かすために、配列の範囲外アクセスを厳しくチェックしているためです。配列の長さが三であれば、使えるインデックスはゼロから二までであり、それ以外の数値を指定するとエラーになります。
この仕組みを理解していれば、エラーメッセージを見たときに「インデックスが配列の長さを超えているのではないか」と冷静に原因を考えられるようになります。Javaの配列操作でエラーが出たときは、まずインデックスの値と配列の長さを確認する癖をつけるとよいでしょう。
まとめとして配列とインデックスを確認するサンプルプログラム
ここで、配列のインデックスの基本を改めて確認するためのサンプルプログラムを見てみましょう。配列の長さとインデックスの関係が分かりやすくなる例です。
public class ArrayIndexSummary {
public static void main(String[] args) {
String[] languages = {"Java", "Python", "C", "JavaScript"};
System.out.println("最初の要素: " + languages[0]);
System.out.println("最後の要素: " + languages[languages.length - 1]);
}
}
最初の要素: Java
最後の要素: JavaScript
このプログラムでは、配列の最初と最後の要素をインデックスで取得しています。特に、配列の長さを表すlengthを使い、「長さマイナス一」が最後のインデックスになる点は、Javaの配列操作で非常によく使われる考え方です。これを覚えておくことで、配列の要素数が変わっても柔軟に対応できるコードが書けるようになります。
配列のインデックスは、今後学習するfor文や拡張for文、コレクションフレームワークなどとも深く関係してきます。ここで基礎をしっかり固めておくことで、Javaの学習がよりスムーズに進むでしょう。
生徒
「配列のインデックスがゼロから始まる理由が、少しずつ分かってきました。」
先生
「それはいいね。ゼロ始まりに慣れることが、配列を使いこなす第一歩だよ。」
生徒
「エラーが出たときも、インデックスの範囲を確認すれば原因が分かりそうです。」
先生
「その通り。配列の長さとインデックスを意識できれば、ミスはかなり減るよ。」
生徒
「これからは、配列を使うときにインデックスの意味を考えながら書いてみます。」
先生
「その意識があれば、Javaの基礎は確実に身についていくね。」