Java の配列とは?配列の宣言、初期化、値の設定を初心者向けに解説!
新人
「Java で複数のデータをまとめて管理する方法はありますか?」
先輩
「それなら、配列を使うといいよ!配列を使えば、同じ種類のデータをひとまとめにして管理できるんだ。」
新人
「配列って何ですか?どのように使うんですか?」
先輩
「それじゃあ、Java の配列について基本から説明していこう!」
1. Java の配列とは?(基本的な説明)
Java の 配列 は、同じ種類のデータをまとめて管理するための仕組みです。たとえば、5 人のテストの点数を管理する場合、それぞれの点数を別々の変数に保存すると管理が大変になりますが、配列を使えば簡単にまとめられます。
配列を使わない場合
public class NoArrayExample {
public static void main(String[] args) {
int score1 = 80;
int score2 = 90;
int score3 = 85;
int score4 = 70;
int score5 = 95;
System.out.println("1人目の点数: " + score1);
System.out.println("2人目の点数: " + score2);
System.out.println("3人目の点数: " + score3);
System.out.println("4人目の点数: " + score4);
System.out.println("5人目の点数: " + score5);
}
}
1人目の点数: 80
2人目の点数: 90
3人目の点数: 85
4人目の点数: 70
5人目の点数: 95
このように、それぞれのデータを個別の変数で管理すると、変数の数が増えてしまい管理が大変になります。そこで、配列を使うことで、より簡単にデータを扱うことができます。
配列を使った場合
public class ArrayExample {
public static void main(String[] args) {
int[] scores = {80, 90, 85, 70, 95};
System.out.println("1人目の点数: " + scores[0]);
System.out.println("2人目の点数: " + scores[1]);
System.out.println("3人目の点数: " + scores[2]);
System.out.println("4人目の点数: " + scores[3]);
System.out.println("5人目の点数: " + scores[4]);
}
}
1人目の点数: 80
2人目の点数: 90
3人目の点数: 85
4人目の点数: 70
5人目の点数: 95
このように、配列を使うことで、複数のデータを簡単に管理できるようになります。
2. 配列の宣言と初期化(基本的な使い方)
Java で配列を使うためには、まず配列を 宣言 し、データを入れるための 初期化 を行います。
配列の宣言
Java では、次のようにして配列を宣言できます。
int[] numbers; // 整数型の配列を宣言
ここで、int[] numbers; は「整数型の配列」を意味します。ただし、この時点ではデータを格納できません。
配列の初期化(要素数を指定する)
配列を使うためには、メモリを確保する必要があります。次のように記述することで、配列を初期化できます。
numbers = new int[5]; // 要素数5の配列を確保
このように、new int[5] と書くことで、5つの整数を格納できる配列を作成できます。
配列の宣言と初期化を同時に行う
通常、配列の宣言と初期化は同時に行うことが多いです。
int[] numbers = new int[5]; // 要素数5の整数型配列を宣言
この書き方なら、配列を宣言しつつ、すぐに初期化することができます。
配列の初期化(値を直接指定する)
配列の初期値を指定する場合は、次のように書くこともできます。
int[] numbers = {10, 20, 30, 40, 50}; // 直接値を指定
この場合、配列のサイズを指定する必要はなく、自動的に 5 要素の配列が作成されます。
配列の要素を設定する
配列の要素には、次のようにして値を設定できます。
int[] numbers = new int[3]; // 3つの要素を持つ配列を作成
numbers[0] = 100; // 1つ目の要素に100を代入
numbers[1] = 200; // 2つ目の要素に200を代入
numbers[2] = 300; // 3つ目の要素に300を代入
System.out.println(numbers[0]); // 100
System.out.println(numbers[1]); // 200
System.out.println(numbers[2]); // 300
100
200
300
このように、配列の各要素には 配列名[インデックス] という書き方でアクセスできます。
3. 配列の要素を取得する方法(array[0] の基本)
Java の配列では、各データ(要素)に番号(インデックス)を使ってアクセスします。最初の要素は 0 番目から始まり、次の要素は 1 番目、というように番号がついています。
配列の要素にアクセスする基本
public class ArrayAccess {
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
System.out.println("1つ目の要素: " + numbers[0]); // 10
System.out.println("2つ目の要素: " + numbers[1]); // 20
System.out.println("3つ目の要素: " + numbers[2]); // 30
}
}
1つ目の要素: 10
2つ目の要素: 20
3つ目の要素: 30
このように、配列名[インデックス] という書き方をすると、その位置のデータを取得できます。
注意:配列の範囲外を指定するとエラーになる
配列の範囲外の要素を取得しようとするとエラー(ArrayIndexOutOfBoundsException)になります。
public class ArrayOutOfBounds {
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 になります。
4. 配列の長さを調べる(length プロパティの使い方)
配列の長さ(要素の数)は、length プロパティを使うことで取得できます。
length を使って配列の長さを取得
public class ArrayLength {
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
System.out.println("配列の長さ: " + numbers.length);
}
}
配列の長さ: 5
このように、配列名.length を使うことで、配列の要素の数を簡単に取得できます。
length を使って最後の要素を取得する
public class LastElement {
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
System.out.println("最後の要素: " + numbers[numbers.length - 1]);
}
}
最後の要素: 50
この方法を使えば、配列の長さが変わっても、常に最後の要素を取得できます。
5. 配列をループで操作する(for 文と拡張 for 文)
配列のデータをすべて表示する場合、一つずつ指定すると大変ですが、for 文 や 拡張 for 文 を使うと簡単に処理できます。
for 文を使った配列の操作
public class ArrayLoop {
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 文 を使うと、すべての要素に順番にアクセスできます。
拡張 for 文を使った配列の操作
Java では、拡張 for 文(for-each 文)を使うと、より簡単に配列の要素を取得できます。
public class EnhancedForLoop {
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 文では、配列の要素を順番に取り出して処理できます。
for 文と拡張 for 文の違い
for 文… 配列のインデックスを使って要素にアクセスできる拡張 for 文… すべての要素を簡単に取り出せるが、インデックスを取得できない
用途に応じて使い分けましょう。
6. 配列の値を変更する方法(値の上書き)
配列の要素は、あとから値を変更(上書き)することができます。特定のインデックスを指定して、新しい値を代入するだけです。
配列の値を変更する基本
public class ArrayUpdate {
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
numbers[2] = 100; // 3番目の要素を100に変更
System.out.println("変更後の配列:");
for (int num : numbers) {
System.out.println(num);
}
}
}
変更後の配列:
10
20
100
40
50
このように、numbers[2] = 100; と書くことで、配列の3番目の要素を変更できます。
ループを使って値を変更する
配列のすべての要素を変更したい場合は、for ループを使うと便利です。
public class ArrayUpdateLoop {
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
// すべての値を2倍に変更
for (int i = 0; i < numbers.length; i++) {
numbers[i] *= 2;
}
System.out.println("すべての値を2倍に変更:");
for (int num : numbers) {
System.out.println(num);
}
}
}
すべての値を2倍に変更:
20
40
60
80
100
この方法を使えば、配列のすべての要素に対して一括で処理を行うことができます。
7. 配列の中から特定の値を探す方法(線形探索)
配列の中から特定の値を探す方法はいくつかありますが、最も基本的なのが 線形探索 です。
線形探索とは?
線形探索(リニアサーチ)は、配列の最初から順番に調べていき、目的の値を見つける方法です。
線形探索のコード
public class LinearSearch {
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 番目にあります。
この方法を使うと、配列の中に目的の値があるかどうかを簡単に調べることができます。
複数の値を検索する
もし、配列の中に同じ値が複数ある場合、それをすべて探すこともできます。
public class FindAllOccurrences {
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 30, 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;
}
}
if (!found) {
System.out.println(target + " は配列に含まれていません。");
}
}
}
30 は配列の 2 番目にあります。
30 は配列の 4 番目にあります。
このようにして、配列の中のすべての該当する値を見つけることができます。
8. 練習問題:「配列の基本操作」を使ったプログラムを作ろう
最後に、これまで学んだ配列の基本操作を組み合わせて、簡単なプログラムを作成してみましょう。
練習問題:配列の最大値と最小値を求める
以下の配列から、最大の値と最小の値を求めるプログラムを作成してください。
実装例
public class FindMinMax {
public static void main(String[] args) {
int[] numbers = {25, 47, 89, 12, 94, 55, 38};
int max = numbers[0]; // 最大値を初期化
int min = numbers[0]; // 最小値を初期化
for (int num : numbers) {
if (num > max) {
max = num;
}
if (num < min) {
min = num;
}
}
System.out.println("最大値: " + max);
System.out.println("最小値: " + min);
}
}
最大値: 94
最小値: 12
このプログラムでは、最初の要素を最大値・最小値の初期値として設定し、配列のすべての要素を順番に比較して最大・最小を見つけます。
練習問題の追加
以下の課題にも挑戦してみましょう。
- 配列の平均値を求めるプログラムを作る
- 配列の要素を逆順に表示するプログラムを作る
- 偶数の数だけを表示するプログラムを作る
このような練習を通して、配列の扱いに慣れていきましょう!
課題1: 配列の平均値を求める
配列のすべての要素の合計を計算し、それを要素の数で割ることで平均値を求めます。
public class ArrayAverage {
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
int sum = 0;
for (int num : numbers) {
sum += num;
}
double average = (double) sum / numbers.length;
System.out.println("配列の平均値: " + average);
}
}
配列の平均値: 30.0
合計を計算し、配列の長さ で割ることで平均値を求めます。整数の計算になるので、(double) をつけて小数点も考慮しています。
課題2: 配列の要素を逆順に表示する
配列の最後の要素から順番に表示することで、逆順に表示するプログラムを作ります。
public class ReverseArray {
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
System.out.println("配列を逆順に表示:");
for (int i = numbers.length - 1; i >= 0; i--) {
System.out.println(numbers[i]);
}
}
}
配列を逆順に表示:
50
40
30
20
10
for ループを使い、最後のインデックスから順番に値を取得することで逆順に表示できます。
課題3: 偶数の数だけを表示する
配列の要素の中から偶数だけを探し、それを表示するプログラムを作ります。
public class EvenNumbers {
public static void main(String[] args) {
int[] numbers = {10, 21, 32, 43, 54, 65, 76};
System.out.println("偶数の要素:");
for (int num : numbers) {
if (num % 2 == 0) {
System.out.println(num);
}
}
}
}
偶数の要素:
10
32
54
76
num % 2 == 0 を使って偶数を判定し、偶数のときだけ出力するようにしています。