【Java】配列について( length, インデックス )

#配列

勉強のメモとして、配列について学んだことをメモります。

##配列とは
プログラミング言語には、「いくつかの関係のあるデータをグループにして、まとめて1つの変数として扱う」仕組みががあり、それを 「**配列**」と呼びます。

##配列操作
配列には以下のような、「*その変数が保持する特定の値や値全体に対して行える機能*」があります。

- **取り出し**
- **書き換え**
- **削除**

これらを総称して「配列操作」と呼びます。

##配列の作り方
**結論からいうと配列の作り方は以下です。**

```
要素の型[] 配列変数名 = new 要素の型[要素数];
```
なぜそういう書き方になるかというと、**配列を作るためには、`配列の宣言`、`要素の代入`の2つ手順が必要です。**
例として得点という意味の「score」を配列変数名にして配列を宣言する場合はこうなります。

```java
int[] = score;
score = new int[100];
```


###1. 配列の宣言
配列の宣言の仕方はこちら。

```
要素の型[] = 配列変数名;
```
scoreという配列を宣言するとこうなります。

```java
int[] = score;
```

###2. 要素の代入
要素の代入の仕方はこちら

```
配列変数名 = new 要素の型[要素数]
```

要素数の部分は、たとえば**ポケモン（初代）だったら151、**学校のテストで五教科の得点を入れたい場合は5がはいるといえばわかりやすいかもです。
scoreという配列に「5」という要素を代入するとこうなります

```java
score = new int[5];
```

###【つまり配列はこう書く】 一連の流れを短く書く  
丁寧な書き方（手順を分けた書き方）をすると上記のような形になるが、これらをひとまとめにして書くことでコードがスッキリする。
とりあえず「配列の書き方はこう書く」というのだけ叩き込んでおけばオッケーです。

```
要素の型[] 配列変数名 = new 要素の型[要素数];
```
scoreを短く書いてみます。

```java
int[] score = new int[5];
```

##初期化
変数の値を取り出すには、**必ずまず初期化を行う必要があり、値を代入して初期化していないとエラーが発生してしまいます。**

まずは配列の宣言同様、手順を分けた長い書き方をするとこうなります。

```java

int[] score = new int[5];  //配列scoreの宣言

score[0] = 80;         // 1番目（先頭）の要素に 80 を代入
score[1] = 90;         // 2番目の要素に 90 を代入
score[2] = 100;        // 3番目の要素に 100 を代入
score[3] = 85;         // 4番目の要素に 85 を代入
score[4] = 90;         // 5番目の要素に 90 を代入
```
##【つまり配列はこう書く】 宣言と初期化を同時に行う
それでは上記のスッキリした書き方をしてみましょう。
以下は**要素の数が 3つの場合の配列の宣言と初期化の方法**です。

```
要素の型[] 配列変数名 = {値, 値, 値};
```

80、90、100、85、90 の要素の値（初期値）とする、要素数が 5 の score  という名前のint型配列を宣言する場合はこうなります。

```java
int[] score = {80, 90, 100, 85, 90};
```

##length

###Javaの配列におけるlength
Javaの配列には**`length`**という、その配列の要素数を調べることができる  いうフィールド（情報）があります。
**`length`**を使用することにより、**プログラマが配列の要素数を別の変数に保持するなどの管理をする必要がなくなる**ため、配列がとても利用しやすくなる。

###length 値の参照方法
下記のように配列の変数に対してドット「.」で繋いで記述します。

```
配列変数.length
```
こちらを用いてscoreの要素の数を調べてみたいと思います。

```java
int[] score = {80, 90, 100, 85, 90};
System.out.println(score.length);
```
実行結果は要素数の5が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613675/295ecf23-f762-707d-08c1-f68161441cbb.png)
オッケーです。

##【インデックス】 配列の各要素の参照・更新

###インデックスの指定の仕方
**配列名の直後に[ ] をつけ、インデックス(添字)と呼ばれる数字を指定**することで、**要素の参照や更新**をすることが出来ます。
※ 当然ながら、インデックスも**０から順番に数えます。**

```
配列変数[数字（インデックス）]
```

下記はscore配列の3番めの要素を引っ張り出すときの例です。

```java
int[] score = {80, 90, 100, 85, 90};
System.out.println(score[2]);
```

この場合は100が出力されるはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613675/4d200c94-eafe-56f3-a96d-e9c8451c263c.png)
オッケーでした。

###配列の全要素を表示する（for文を使用）

配列に入ってる要素をすべて出力してみます。
この書き方だと、「０〜score配列の要素数だけ1つずつ出力する」というというのをfor文を使って書いています。

####要素のインデックス番号をすべて抽出
下記は要素のインデックス番号をすべて抽出する場合です。

```java
int[] score = {80, 90, 100, 85, 90};
// インデックス番号をすべて表示
for (int i = 0; i < score.length; i++) {
    System.out.println(i);
}
```

実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613675/dcd8a902-a9ca-57f6-8d27-e9bde785cea3.png)

####配列の中の要素の値をすべて抽出
下記は配列の中の要素の値をすべて抽出する場合です。

```java
int[] score = {80, 90, 100, 85, 90};
// 要素の値をすべて表示
for (int i = 0; i < score.length; i++) {
    System.out.println(score[i]);
}
```
実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613675/47573e02-5864-dd55-5728-04ac06730f06.png)

###合計点を求めるプログラム

すべてのscoreを合計して出力するプログラムを書きました。
処理の流れは..

1. int[]型の変数scoreの宣言と初期化
2. 合計スコアを宣言し、0で初期化する
3. scoreの要素数だけ計算をおこなう
4. 計算された得点を表示する

という流れになります。

```java

// int[]型の変数scoreの宣言と初期化
int[] score = {80, 90, 100, 85, 90};
// 合計スコアを宣言し、0で初期化する
int sum = 0;
//scoreの要素数だけ計算をおこなう
for (int i = 0; i < score.length; i++) {
sum = sum + score[i];
}
//計算された得点を表示する
System.out.println(sum);
```

実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613675/8d0bf307-d4cf-fa12-1d11-5579f13983a5.png)

for文の内容は実質、**`80 + 90 + 100 + 85 + 90 `**を行ったということなので、出力結果は上記のようになりました。


[インスタンス]:https://qiita.com/takahirocook/items/ec01cdcbb440cf0d1cc4
[インスタンス化]:https://qiita.com/takahirocook/items/ec01cdcbb440cf0d1cc4
[アクセス修飾子]:https://qiita.com/takahirocook/items/e51b0b9d37d95ad587fe
[フィールド]:https://qiita.com/takahirocook/items/28df75a133049a74ece1
[フィールド変数]:https://qiita.com/takahirocook/items/28df75a133049a74ece1
[new演算子]:https://qiita.com/takahirocook/items/00f9f97592bf50831d39
[カプセル化]:https://qiita.com/takahirocook/items/e469a7c0539a0012868e
[クラス]:https://qiita.com/takahirocook/items/50cbbdca8e21539170e9
[メソッド]:https://qiita.com/takahirocook/items/5bfe43576d87a2a4006c
[mainメソッド]:https://qiita.com/takahirocook/items/f4635915337303de338c
[メソッドの呼び出し]:https://qiita.com/takahirocook/items/f4635915337303de338c
[コンストラクタ]:https://qiita.com/takahirocook/items/fa1822f2f22c3786593e
[引数]:https://qiita.com/takahirocook/items/5e5b0ba79e869f4a592e
[戻り値]:https://qiita.com/takahirocook/items/3b6fa670a1d6dd4a9386
[this]:https://qiita.com/takahirocook/items/d251ec4693c68f6b9538
[getter・setter]:https://qiita.com/takahirocook/items/27828bc8477735612021
[setter]:https://qiita.com/takahirocook/items/27828bc8477735612021
[getter]:https://qiita.com/takahirocook/items/27828bc8477735612021
[オブジェクト指向]:https://qiita.com/takahirocook/items/041ba7a096b71ab8ffd4
[継承]:https://qiita.com/takahirocook/items/6c84ea66a6e2ad536a37
[オーバーライド]:https://qiita.com/takahirocook/items/09dd8e5f56d6617ce45a
[オーバーロード]:https://qiita.com/takahirocook/items/b937c3c07126fe7e02a4
[this]:https://qiita.com/takahirocook/items/d251ec4693c68f6b9538
[super]:https://qiita.com/takahirocook/items/75a07131e7e791c8442c
[スーパークラス]:https://qiita.com/takahirocook/items/75a07131e7e791c8442c
[final]:https://qiita.com/takahirocook/items/5e0916d9bf28bcf68d0c
[final修飾子]:https://qiita.com/takahirocook/items/5e0916d9bf28bcf68d0c
[定数]:https://qiita.com/takahirocook/items/5e0916d9bf28bcf68d0c
[static修飾子]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[static]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[インスタンスフィールド]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[インスタンス変数]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[動的メソッド]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[インスタンス変数]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[静的メソッド]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[クラスメソッド]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[静的メソッド]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[クラスフィールド]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[クラス変数]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[静的変数]:https://qiita.com/takahirocook/items/cf527f85d17a5af86735
[インターフェイス]:https://qiita.com/takahirocook/items/ca84be8dfef664b19194
[インターフェース]:https://qiita.com/takahirocook/items/ca84be8dfef664b19194
[パッケージ]:https://qiita.com/takahirocook/items/39b58d17abcb159ef5c1
[インポート]:https://qiita.com/takahirocook/items/59a8a09cab6a98d3bca2
[import]:https://qiita.com/takahirocook/items/59a8a09cab6a98d3bca2