###### 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) } ```