###### tags: `Java 學習筆記`
# Java 學習筆記 - 3-1: 陣列 Array
表述相同型態的複數參考資料型態
## 宣告
```java=
int number; // 宣告一個變數,會存在 Steak 裡
int number[] = new int[7];
// 宣告一個陣列,該型態為宣告為 int 的陣列,和 scanner 一樣都是參考資料變數所以需要 new
// [7] 代表要分配給他七個 int 的空間存在 heap
// 仍會在 steak 中存該陣列在 heap 中的位置
```
## 應用
```java=
int number[]; // int[] number; 這個寫法也可以
number = new int[7];
number[0] = 9;
```
* 第三行: 把 9 這個數字存在第 0 格
* 如果印 number 會印出一串 address
* 所有資料型態都可以是陣列
* 在 steak 的不同變數/位置可以存一樣的 address
* 整數型態的空間可以做運算,number[0]++; 得到 10
* 一個陣列會儲存在同一條連續的記憶體,陣列越長,記憶體長度需求越長,但現今技術會假裝讓他連續
### 把數值用迴圈從進陣列
```java=
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int number[];
number = new int[n];
for (int i = 0; i < n; i++) {
number[i] = i + 1;
}
```
### 陣列初始化
```java=
int Ary1[] = new int[]{1,2,3,4};
int[] Ary2 = new int[]{1,2,3,4};
int Ary3[];
Ary3 = new int[]{1,2,3,4};
int[] Ary4;
Ary4 = new int[]{1,2,3,4};
int Ary1[] = {1,2,3,4}; // 如果沒有 new ,分兩行就會錯誤
int[] Ary2 = {1,2,3,4};
```
#### GC (Garbage Collect)
重新宣告一個陣列 (參考資料型態) 時,GC 就會被觸發:當一個實體沒有被任何變數連結,就會被釋放掉,但不一定會馬上觸發
### 搭配 Scanner 的用法
```java=
Scanner sc = new Scanner(System.in);
Scanner scanners[] = new Scanner[2];
scanners[0] = sc;
// 上下這兩行結果相同
int n = scanner[0].nextInt(); // 會把數值存到 n 裡
// 但這個時候 scanner[1] 沒有存掃描器,執行的話會報錯 "NullPointException"
```
* Null 代表空值,可用來節省空間
### 讓使用者輸入數值到 Array 中並限制輸入範圍
```java=
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int arr[] = new int[n];
for (int i = 0; i < arr.length; i++) {
do {
arr[i] = sc.nextInt();
} while (arr[i] < 0 || arr[i] > 9);
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
```
### 在陣列中搜尋
#### 循序搜尋法
不規律的資料中,逐一搜尋
```java=
int arr[] = {1,2,3,4,5,63,6,7,0}
int key = 6;
for (int i = 0; i < arr.length; i++) {
if (key == arr[i]) {
System.out.println(key + "位於" + i)
}
```