Javaのお勉強 ～その7～ 配列

# 1. はじめに
今回は、配列になります。
1 つのくくりで、ある複数の変数を 1 つのまとまりとして扱えるものが、配列になります。

別の表現をすると、1 つの大きな箱の中に、複数の箱が入っているようなイメージかなと思います。 

![キャプチャ_24.png](https://qiita-image-store.s3.amazonaws.com/0/259129/5edb117c-dc51-8102-4199-d7c6a303dcd3.png)

こんなイメージ。

# 2. 配列の宣言
 では、配列の宣言の方法を見てみましょう。

**型[ ] 配列名**

変数宣言時の型に、[ ] をくっつけたような形ですね。

また、配列はいくつの変数の箱を使うかということを、準備してあげなければなりません。
この時の定型文は、

**配列名 = new 型[ 個数 ];**

右辺の型は、宣言のときに指定した配列の型と同じにしてください。
クラスを扱うときは右辺と左辺の型が違う場合がありますが複雑になるので今回は割愛します。

また、個数というのは、使いたい箱の数になります。
3 と指定すれば、3 個の箱が作られるようなものです。 

例となるソースの載せておきます。

```java:Main.java
public class Main {
	public static void main(String[] args) {

		// 配列の宣言
		int[] array;

		// 生成する
		array = new int[ 3 ];

	}
}
```

では、実際に配列中の箱に値を代入してみたいと思いますがその前に...

配列内の箱へのアクセスは、少しクセがあります。

上記のように、3 個生成したとした場合、0 ～ 2 番の番号が当てられます。

![キャプチャ_25.png](https://qiita-image-store.s3.amazonaws.com/0/259129/fb8cb33a-0a54-d101-3421-48509e865525.png)


この番号を使って、アクセスをします。
この番号を「**添え字**」といいます。

**0 から始まる**というところが、注意。 

この点を踏まえた上で、次のソースを見てください。 

```java:Main.java
public class Main {
	public static void main(String[] args) {

		// 配列の宣言
		int[] array;

		// 3 個 生成する
		array = new int[3];

		// 配列 0 番に 64 を代入
		array[0] = 64;

		// 配列 1 番に 128 を代入
		array[1] = 128;

		// 配列 2 番に (0 番 + 1 番) を代入
		array[2] = array[0] + array[1];

	}
}
```

配列中の 0 番目を使いたい場合は、array[0] のように [0] を配列名の隣にくっつけて記述します。

では、ソースの解説をします。 

まずは、array という配列を宣言し、3 個の箱を生成しています。

そして、配列中の 0 番目に 64 、1 番目に 128 という値を代入してみました。

![キャプチャ_26.png](https://qiita-image-store.s3.amazonaws.com/0/259129/35f06261-a809-9cd1-f737-4d1318ea5a01.png)

また、0 番目( 64 )と 1 番目( 128 ) を足した値( 192 )を、2 番目に代入しています。 

![キャプチャ_27.png](https://qiita-image-store.s3.amazonaws.com/0/259129/2988c30a-4678-689c-43cf-634b1ec0f9b7.png)

という処理の流れになっています。

# 3. 初期化
配列中の値を宣言と同時に代入することができます。
int number = 100; のような感じでの初期化。

では実際にソースを。 

```java:Main.java
public class Main {
	public static void main(String[] args) {

		// 配列の宣言 & 初期化
		int[] array = { 64, 128, 256 };

	}
}
```

このように、{ } を使います。
また、間には「 , 」で区切ります。 

このソースの場合は、配列内の箱の個数の指定をしていませんが、3 つ用意されます。
なぜかというと、{ } の中にリテラルが、3 つ記述されているためです。

{ } の間のリテラルの個数に合わせて、配列で使う箱の個数も生成されるということです。 

# 4. 多次元配列
今までは、[ ] が 1 つだけ使ってきました。
[ ] が 1 つだけの配列を「**1 次元配列**」といいます。 

一方、[ ]が複数のものを「**多次元配列**」といい、[ ] が 2 つであれば、2 次元配列と呼びます。
今回は、代表として、2 次元配列を扱いたいと思います。 

2 次元配列は、いわば 2 つの配列をまとめて、1 つの配列名で扱えるようにしたものです。

では、実際に array という配列名で、2 つの配列で、3 個の箱を生成してみましょう。 

```java:Main.java
public class Main {
	public static void main(String[] args) {

		// 多次元配列の宣言
		int[][] array;

		// 2 つの配列 3 個の箱を生成
		array = new int[ 2 ][ 3 ];

	}
}
```

 宣言の際の、[ ]の数が 2 つになっています。
これで、2 次元配列の宣言になります。

また、配列を生成している時の右辺でも、[ ]が 2 つになっています。
宣言時の [ ] と数を合わせてください。

[ 2 ][ 3 ] は、2 × 3 となる 6 つの箱が生成されることを意味します。 

![キャプチャ_28.png](https://qiita-image-store.s3.amazonaws.com/0/259129/2a42af8c-5302-2466-db03-2daa0ddfd76c.png)

このような表のイメージ。

また、それぞれの配列内の位置にアクセスする場合は、下のようになります。 

```java:Main.java
public class Main {
	public static void main(String[] args) {

		// 多次元配列の宣言
		int[][] array;

		// 2 つの配列 3 個の箱を生成
		array = new int[ 2 ][ 3 ];

		// 箱に代入
		array[1][2] = 100;

	}
}
```

配列の[ 1 ]の[ 2 ]に 100 を代入してみました。
この時は、下表のイメージ。
![キャプチャ_29.png](https://qiita-image-store.s3.amazonaws.com/0/259129/bd82c6c4-ea63-a525-9d37-8b93516ecad0.png)

[ 1 ] が縦の 1 番を指し、[ 2 ] が横の 2 番を指します。
「行」と「列」ってそれぞれ呼びます。

上記の 100 が入っているところが、[ 1 ][ 2 ] が指す位置になります。 

また、宣言と同時に初期化をする方法も紹介しておきます。
例に出した、2 × 3 の配列を使いたいと思います。 

```java:Main.java
public class Main {
	public static void main(String[] args) {

		// 多次元配列の宣言 & 初期化
		int[][] array = { { 100, 200, 300 }, { 101, 201, 301 } };

	}
}
```

このように、{ } で 2 つの { } を囲ってあげるような形になります。次元が増えれば増えるほど、{ }も増えます。

![キャプチャ_30.png](https://qiita-image-store.s3.amazonaws.com/0/259129/3c363387-c316-b93b-0462-12cc79d80a9a.png)


また、内側の { 100, 200, 300 } と{ 101, 201, 301 }の間に「 , 」をつけることをお忘れなく。 

# 5. おわりに
配列は、参照型として扱われます。
詳しくは、メモリのアドレスの話になり、複雑になりやすくなってしまうため、割愛させてもらいました。

C 言語などを勉強しますと、アドレスについての理解が深まりますが、初めのうちは、とっつきにくかったりしますので、まずは Java で一通り勉強したあと、C 言語などの勉強をするのも悪くない道順じゃないかーと思います。

また、配列を使えば、関係ある変数をまとめて扱えますし、後に紹介する繰り返し文と併用することで、多くのメリットを生むことが出来ます。

大切な「配列」ですので、忘れないようにしてくださいね。 

次回は「キャスト」について。

次回 →「[Javaのお勉強 ～その8～ キャスト](https://qiita.com/koukonko/items/ae62941b1917f56aaf54)」