Javaプログラミング入門

10. 配列

最終更新:

javatutorial

- view
管理者のみ編集可

配列とは

配列とは、同じ種類のデータをまとめて扱うことができる仕組みです。

想像してみてください。
あなたはボールを16個持っています。
それぞれのボールに数字を割り当てたいとしましょう。
でも現在の知識では、このように書くしかありません。
  1. int ball1 = 0;
  2. int ball2 = 1;
  3. int ball3 = 2;
  4. int ball4 = 3; // ...ずっと続く
まだ、ビリヤードのようにボールが16個ならどうにか頑張れそうな気もします。
しかし、ビンゴの玉になると75個に増えますし、この数が100個、1000個と増えると
変数を定義するだけでも大変になってしまいます。
また、変数の管理も大変で、名前の付け間違いや、数の数え間違いが起こるリスクも高まります。

このような問題を解決してくれるのが配列になります。

配列のイメージ

イメージしやすい例として「くつ箱」や「ロッカー」を考えてみましょう。
くつ箱には同じサイズのスペースが並んでいて、それぞれに番号が振られています。
番号を使えば、どの場所に何があるか簡単に把握できます。

こちらが配列のイメージになります。

たとえば「番号2のロッカーに入っている値は?」と聞かれたら、すぐに「75」と答えられます。
Javaでは、このようにして番号を使って値を知ることができます。
そして、この番号の事を、添え字(Index, インデックス)と呼びます。
また、一つのロッカーに入っている値の事を要素(Element, エレメント)と呼びます。

配列の使い方

Javaにおいて、変数も配列も使い方の基本は「宣言 → 代入 → 参照」です。
つまり、配列は変数の応用形であり、基本の考え方は変わりません。
この時点では、まだ中身はありません。

配列の宣言


配列の宣言記載方法は
[] 配列名; 
になります。
型にはデータ型を指定し、配列名には、変数名と同じく配列の名前を指定します。

サンプル:ArraySample.java
  1. public class ArraySample {
  2. public static void main(String[] args) {
  3. int[] balls;
  4. }
  5. }

配列の生成

通常の変数では、宣言をしたらそのまま代入することができました。
int num; // 宣言
num = 10; // 代入 
しかし、配列はそのままでは値を代入することができません。
配列は、同じ種類のデータをいくつもまとめてしまえる箱のセットのようなものです。
でも、使う前に「いくつ箱が必要なのか」を先に決めなければなりません。

配列の生成する際の記載方法は
配列名 = new[要素数]; 
になります。
配列名には、変数名と同じく配列の名前を指定します。
代入演算子を記載した後に「new」というキーワードを記載する必要があります。
その次に、型にはデータ型を指定し、要素数にはいくつ箱を用意する必要があるのかという数値を指定します。

サンプル:ArraySample.java
  1. public class ArraySample {
  2. public static void main(String[] args) {
  3. int[] balls;
  4. balls = new int[5];
  5. }
  6. }
これは、「5個分のボールを入れるための箱(balls)を準備してください」という意味です。
このいくつ箱を用意する必要があるのかを指定する要素数にはint型の整数値を入れるという決まりがあります。
[5] は、5個の箱が必要という指定になります。

配列へ代入

先ほどの配列のイメージを見てみましょう。

前にお話ししたように、配列は「くつ箱」や「ロッカー」のように、同じ大きさの箱がズラッと並んでいるイメージです。
それぞれの箱には「添え字(Index, インデックス)」がついていて、その番号を使って中身を操作します。
たとえば、「番号2のロッカーに3を入れる」としたら、Javaでは次のように書きます。
配列の宣言記載方法は
配列名[2] =; 
になります。

しかし、ここで気をつけたいポイントがあります。
たとえば scores[2] = 75; と書いた場合、これは「2番目のロッカーに入れる」という意味ではありません。
実はこのとき、3番目のロッカーに値を入れていることになります。
なぜなら、Javaではロッカーの番号(添え字)が0から始まるというルールがあるからです。

つまり
添え字0 → 1番目のロッカー
添え字1 → 2番目のロッカー
添え字2 → 3番目のロッカー
このように、「添え字の数字 + 1」が、実際のロッカーの順番と一致します。
サンプル:ArraySample.java
  1. public class ArraySample {
  2. public static void main(String[] args) {
  3. int[] balls;
  4. balls = new int[5];
  5. balls[0] = 9;
  6. balls[1] = 12;
  7. balls[2] = 8;
  8. balls[3] = 3;
  9. balls[4] = 5;
  10. }
  11. }

配列の参照

では、代入した値を参照して、画面にしてみましょう。
参照する際は代入と同じように、
配列名[添え字] 
と記載することで参照することが可能になります。
今回は、System.out.println()で値を画面に出力してみます。
サンプル:ArraySample.java
  1. public class ArraySample {
  2. public static void main(String[] args) {
  3. int[] balls;
  4. balls = new int[5];
  5. balls[0] = 9;
  6. balls[1] = 12;
  7. balls[2] = 8;
  8. balls[3] = 3;
  9. balls[4] = 5;
  10. System.out.println(balls[0]);
  11. System.out.println(balls[1]);
  12. System.out.println(balls[2]);
  13. System.out.println(balls[3]);
  14. System.out.println(balls[4]);
  15. }
  16. }
実行結果
9
12
8
3
5
各配列に代入された要素の値が正しく出力されています。

配列の注意点

1.添字は int型 である

配列の添字に使えるのは、int型またはbyte型、short型です。
long型やfloat型などのデータ型は使用できません。

2.添字には変数・定数・式も使える

添字には、数値のほかに変数や計算式も使用可能です。
サンプル:ArrayCareful.java
  1. public class ArrayCareful {
  2. public static void main(String[] args) {
  3. int i = 1;
  4. int[] scores = new int[5];
  5. scores[i] = 95; // scores[1] に代入
  6. scores[i + 1] = 100; // scores[2] に代入
  7. System.out.println(scores[i + 1]);
  8. }
  9. }
実行結果
100 

3.配列の生成について

Javaでは、配列を生成(new)したとき、各要素は自動的に初期値が設定されます。
つまり、配列の要素を明示的に初期化しなくても、中身には値が入っています
配列の型 初期値
整数型(int[]) 0
小数型(double[]) 0.0
真偽値型(boolean[]) false
文字列型(String[]) null
その他参照型 null
サンプル:ArrayInit.java
  1. public class ArrayInit {
  2. public static void main(String[] args) {
  3. int[] numbers;
  4. numbers = new int[3];
  5. System.out.println(numbers[0]);
  6. System.out.println(numbers[1]);
  7. System.out.println(numbers[2]);
  8. }
  9. }
実行結果
0
0
0 

配列の初期化

配列も変数同様に初期化をすることができます。
初期化の方法は3種類あります。

① 要素数だけ指定して初期化

int[] numbers = new int[5]; 
例:初期化のイメージ

このコードは、int型の配列の箱を5個分確保するという意味です。
ただし、中身(要素)には値を入れていません。
このように初期化した配列には、先程の説明同様、自動的に初期値が入ります

② 値を指定して初期化

int[] scores = {80, 90, 100, 40, 55}; 
例:初期化のイメージ

この書き方は、配列を作成すると同時に、値も設定して初期化します。
このとき、配列の要素数は指定不要で、中括弧 {} にある要素の数が自動で決まります。
int[] scores = new int[] {80, 90, 100, 40, 55}; 
例:初期化のイメージ

こちらの書き方も、上と全く同じ配列を生成します。
違いとしては
上の書き方は、変数の宣言と同時に初期化する場合のみ使えます。
int[] scores = {80, 90, 100, 40, 55}; // これはOK
int[] scores2;
scores2 = {80, 90, 100, 40, 55}; // これはNG 
下の書き方は、どこでも使える初期化構文になります。
int[] scores = new int[] {80, 90, 100, 40, 55}; // これもOK
int[] scores2;
scores2 = new int[] {80, 90, 100, 40, 55};  // これもOK 

配列の.lengthとfor文の組み合わせ

Javaの配列には、自分の配列の大きさ(要素の数)を教えてくれる方法があります。
それが.lengthです。
サンプル:ArrayLength.java
  1. public class ArrayLength {
  2. public static void main(String[] args) {
  3. int[] numbers = new int[5];
  4. System.out.println(numbers.length);
  5. }
  6. }
実行結果
5 
このように.lengthは「この配列には何個の箱があるか?」を教えてくれます。

先程、配列はロッカーが横に並んでいるようなイメージとして例えました。
それぞれのロッカーには番号(添字)がついていて
サンプル:ArrayLength.java
  1. public class ArrayLength {
  2. public static void main(String[] args) {
  3. int[] numbers = new int[5];
  4. System.out.println(numbers.length);
  5. }
  6. }
サンプルだとnumbers[0] から numbers[4] まで、合計5個のロッカーがあります。
このロッカーの「」を教えてくれるのが .length です。
つまり、ロッカーが何個あるかを調べたいときは、.lengthを使えばいいのです。

for文と.lengthの組み合わせ

ロッカーを先頭から1つずつ順番に開けて、全体をチェックしたいときは
for文と.lengthを組み合わせて、こんなふうに書くことができます。
サンプル:ArrayLength.java
  1. public class ArrayLengthAndFor {
  2. public static void main(String[] args) {
  3. int[] numbers = new int[5];
  4. for (int i = 0; i < numbers.length; i++) {
  5. System.out.println(i + "番目のロッカー: " + numbers[i]);
  6. }
  7. }
  8. }
実行結果
0番目のロッカー: 0
1番目のロッカー: 0
2番目のロッカー: 0
3番目のロッカー: 0
4番目のロッカー: 0 

なぜ.lengthを使うのか?


コラム


ウィキ募集バナー