1. 程式人生 > >【小白看的Java教程】第十四章,讓陣列動起來

【小白看的Java教程】第十四章,讓陣列動起來

基本操作(重點)

int[] nums = new int[]{1,3,5,7};

image.png

+ 獲取陣列長度,語法: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("-----");

}