##配列基礎
```java
//配列変数の作成(宣言)
int scores;
//要素の作成と代入
scores = new int[5];
//配列の宣言と要素の作成、代入を同時に行う
int newScores = new int[5];
//配列の長さを調べる
System.out.print(newScores.length);
//配列の要素に値を代入
newScores[1] = 20;
//20が出力
System.out.println(newScores[1]);
```
##配列の初期化
変数の値を取り出す前には、必ず値を代入して初期化しなければ
コンパイルエラーが発生してしまう。
しかし配列は自動的に初期化される※下記参照
| intやdoubleなどの整数の型 | boolean型 | String |
| ------------------------- | --------- | ------ |
| 0 | false | null |
## 配列作成と初期化の省略記法
```java
//省略記法1
int scores = new int { 1, 2, 3, 4, 5 };
//省略記法2
int newScores = { 1, 2, 3, 4, 5 };
}
```
## forループで配列を回す
基本構文
```java
for (int i = 0; i < 配列変数名.length; i++) {
配列変数名[i]を使った処理
```
以下、配列を使用し合計と平均をループ処理で計算したサンプル
```java
public class Main {
publicstaticvoidmain(String args) {
int scores = { 20, 30, 40, 50, 60 };
int sum = 0;
for (int i = 0; i < scores.length; i++) {
sum+= scores[i];
}
int average = sum / scores.length;
System.out.println("合計点" + sum);
System.out.println("平均点" + average);
}
}
```
forループの中にif条件判定を行うサンプル
```java
public class Main {
publicstaticvoidmain(String args) {
int scores = { 20, 30, 40, 50, 60 };
int sum = 0;
int count = 0;
for (int i = 0; i < scores.length; i++) {
if (scores[i] >= 50) {
count++;
}
}
int average = sum / scores.length;
System.out.println("50点以上の科目の数は" + count);
}
```
## 2つの配列の利用
```java
public class Main {
publicstaticvoidmain(String args) {
int seq = new int[10];
for (int i = 0; i < seq.length; i++) {
//作成した配列の要素にランダムで0−3までの数字を代入
seq[i] = new java.util.Random().nextInt(4);
//配列seqに紐づく配列baseを作成
char base = { 'A', 'T', 'G', 'C' };
System.out.println(base[seq[i]]);
}
}
}
```
## 拡張for文
配列の要素を1つずつ取り出すループを簡単に書くための
特殊なfor文
```java
for (要素の型 任意の変数名 : 配列変数名) {
処理
}
```
```java
public class Main {
publicstaticvoidmain(String args) {
int scores = { 20, 30, 40, 50, 60 };
for (int value : scores) {
System.out.println(value);
}
}
}
```
##メモリと変数
コンピュータは使用するデータをメモリに記録する。
各区画には住所(アドレス)が振られている
変数を宣言すると、空いている区画を変数のために確保する。
変数に値を代入するとは、確保しておいた区画に値を記録すること
## メモリと配列
```java
int scores = new int[5]
```
を実行した時のメモリの様子
①int型の要素を5つ持つ配列がメモリ上に作成される
②int型の配列変数scoresがメモリ上に作成される
③配列変数scoresに配列の先頭要素のアドレス代入される
⇨配列を保持する変数には、実態ではなく配列の参照先(住所)
が代入されているという事
### プログラムからscores[n]と指定されたら
①scoresから番地を取り出し、配列(先頭要素)を見つける
②見つけた配列の先頭要素からn個後ろの要素の区画を読み書きする。
## 参照と参照型
```java
public class Main {
publicstaticvoidmain(String args) {
//配列arrayAの宣言と代入
int arrayA = { 1, 2, 3 };
//配列arrayBの作成とarrayAを代入する
int arrayB = arrayA;
//arrayBの0番目に値を代入(上書き)
arrayB[0] = 100;
//参照元のarrayAの0番目を出力(100が出力される)
System.out.println(arrayA[0]);
}
}
```
上記サンプルでは、arrayAとarrayBは
同じ配列を参照している。
よってarrayBの配列変数で値を代入しても
arrayAの出力結果も100となる。
配列変数arrayAは「配列の実態は○○番地にあります」と指し示す
動作をしている事になる。これを参照と呼び、
メモリ上の番地を代入する変数のことを参照型変数と呼ぶ
intやbooleanなどは基本型変数といい、参照型とは区別する
```java
public class Main {
publicstaticvoidmain(String args) {
//配列arrayAの宣言と代入
int arrayA = { 1, 2, 3 };
//配列arrayBの作成とarrayAを代入する
int[] arrayB = arrayA;
//arrayBの0番目に値を代入(上書き)
arrayB[0] = 100;
//参照元のarrayAの0番目を出力(100が出力される)
System.out.println(arrayA[0]);
}
}
```