【小白看的Java教程】第十四章,讓陣列動起來
基本操作(重點)
int[] nums = new int[]{1,3,5,7};
+ 獲取陣列長度,語法:int size = 陣列名.length;
int size = nums.length; -> 輸出結果4
+ 獲取元素值,語法:元素型別 變數名 = 陣列名[index];
+ 陣列的索引從0開始,最大索引值是陣列長度-1,那麼索引範圍是 [ 0,陣列名.length - 1 ]。
獲取第一個元素:int ele1 = nums[0]; 輸出1
獲取第二個元素:int ele2 = nums[1]; 輸出3
獲取第四個元素:int ele4 = nums[3 ]; 輸出7
+ 設定元素值,語法:陣列名[index] = 值;
設定第二個元素值為30 nums[1] = 30;
獲取第二個元素: int ele2 = nums[1]; 輸出30
+ 常見的異常
+ NullPointerException:空指標異常(空引用異常)
操作了一個尚未初始化或者沒有分配記憶體空間的陣列
+ ArrayIndexOutOfBoundsException:陣列的索引越界異常
操作的陣列的索引不在[0,陣列名.length-1]範圍內
+ 迭代陣列,也叫遍歷陣列(獲取出陣列中每一個元素)
獲取第一個元素:int ele1 = nums[0 ]; 輸出1
獲取第二個元素:int ele2 = nums[1]; 輸出30
獲取第三個元素:int ele3 = nums[2]; 輸出5
獲取第四個元素:int ele4 = nums[3]; 輸出7
發現,迴圈遍歷的次數是陣列元素的個數,每一次獲取元素只有索引在變化,範圍是[0 , 陣列名.length - 1]。
int[] nums = new int[] { 1, 3, 5, 7 };
for (int index = 0; index < nums.length; index++) {
int ele = nums[index ];//index依次是 0、1、2、3
System.out.println(ele);
}
+ 使用for-each(增強for迴圈)運算元組
for(陣列元素型別 變數: 陣列){
//TODO
}
使用for-each運算元組更簡單,因為可以不關心索引,其底層原理依然是上述的for迴圈運算元組。
int[] nums = new int[] { 1, 3, 5, 7 };
for (int ele : nums) {
System.out.println(ele);
}
使用迴圈運算元組(重點)
int[] nums = new int[]{11,22,33,44,22,55};
需求1:找出陣列中元素22第一次出現的索引位置
public class ArrayDemo3 {
public static void main(String[] args) {
int key = 22;//被搜尋的元素值
int[] nums = new int[] { 11, 22, 33, 44, 22, 55 };
for (int index = 0; index < nums.length; index++) {
if (nums[index] == key) {
System.out.println(index);
break;//找到就結束迴圈
}
}
}
}
需求2:求出int型別陣列中最大元素值
public class ArrayDemo4 {
public static void main(String[] args) {
int[] nums = new int[] { 11, 22, 33, 44, 22, 55 };
int max = nums[0];//max用來記作最大元素值,假設第一個元素是最大的
for (int index = 0; index < nums.length; index++) {
//如果後續某個元素比max大,就儲存到max變數上
if (nums[index] > max) {
max = nums[index];
}
}
System.out.println("max=" + max);
}
}
需求3:按照某種格式列印陣列元素,陣列元素放在方括號[]中,相鄰元素使用逗號分隔開。如上述陣列打印出來,效果如:[11, 22, 33, 44, 22, 55]
public class ArrayDemo5 {
public static void main(String[] args) {
int[] nums = new int[] { 11, 22, 33, 44, 22, 55 };
String str = "[";//str表示結果字串,先拼一個[符號
for (int index = 0; index < nums.length; index++) {
//把每一個元素拼接在str後面
str = str + nums[index];
//如果是最後一個元素,則不拼接,而是]
if(index == nums.length-1) {
str = str + "]";
}else {
//如果不是最後一個元素拼接,
str = str + ", ";
}
}
System.out.println(str);
}
}
二維陣列(瞭解)
在之前,陣列的每一個元素就是一個個的值,這種陣列我們稱之為一維陣列。
二維陣列,其實就是陣列中的每一個元素就是一個一維陣列。
三維陣列,陣列的每一個元素就是一個二維陣列。
其實發現,這種多維陣列都可以簡單稱之為,陣列中的陣列,在實際開發中使用並不多。
定義和靜態初始化一維陣列的語法:
陣列元素型別[] 陣列名 = new 陣列元素型別[]{值1,值2,值3,…};
如:int[] nums = new int[]{1,3,5,7};
定義和靜態初始化二維陣列的語法:
陣列元素型別[][] 陣列名 = new 陣列元素型別[][]{陣列1,陣列2,陣列3,…};
注意,二維陣列中的元素型別是一維陣列,把陣列元素型別[]看成一個整體,表示資料型別。
public class ArrayInArrayDemo1 {
public static void main(String[] args) {
//定義三個一維陣列
int[] arr1 = { 1, 2, 3 };
int[] arr2 = { 4, 5 };
int[] arr3 = { 6 };
//把三個一維陣列儲存到另一個數組中,那麼該陣列就是二維陣列
**int[]**[] arr = new **int[]**[] { arr1, arr2, arr3 };
}
}
定義和動態初始化二維陣列的語法:
陣列元素型別[][] 陣列名 = new 陣列元素型別[x][y];
x表示二維陣列中有幾個一維陣列,y表示每一個一維陣列中有幾個元素。
int[][] arr = new int[3][5];
System.out.println(arr.length); //輸出3
因為二維陣列表示陣列的中的陣列,如果要獲取陣列的每一個元素值,則需要兩個迴圈巢狀。
//二維陣列
int[][] arr = new int[][] {
{ 1, 2, 3 },
{ 4, 5 },
{ 6 }
};
使用for迴圈:
//迭代二維陣列
for (int index = 0; index < arr.length; index++) {
//取出每一個一維陣列
int[] arr2= arr[index];
//迭代一維陣列
for (int j = 0; j < arr2.length; j++) {
int ele = arr2[j];
System.out.println(ele);
}
System.out.println("-----");
}
使用for-each:
for (int[] arr2 : arr) {
for (int ele : arr2) {
System.out.println(ele);
}
System.out.println("-----");
}