天天看點

Java中的數組常見操作

數組越界異常

public static void main(String[] args) {
        int[] array = {15, 25, 35};
        System.out.println(array[0]); //15
        System.out.println(array[1]); // 25
        System.out.println(array[2]); // 35

        // 錯誤寫法
        // 并不存在3号元素,是以發生異常
        System.out.println(array[3]);
    }
           

建立數組,指派3個元素,數組的索引就是15,25,35,沒有3索引,是以我們不能通路數組中不存在的索引,程式運作後,将會抛出 ArrayIndexOutOfBoundsException 數組越界異常。在開發中,數組的越界異常是不能出現的,一旦出現了,就必須要修改我們編寫的代碼。

15
25
35
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
	at com.zjq.javabase.base05.demo03.Demo01ArrayIndex.main(Demo01ArrayIndex.java:25)
           

數組空指針異常

觀察一下代碼,運作後會出現什麼結果。

public static void main(String[] args) {
        int[] array = null;
//        array = new int[3];
        System.out.println(array[0]);
    }
           

array= null 這行代碼,意味着變量arr将不會在儲存數組的記憶體位址,也就不允許再操作數組了,是以運作的時候

會抛出NullPointerException 空指針異常。在開發中,數組的越界異常是不能出現的,一旦出現了,就必須要修

改我們編寫的代碼。

Exception in thread "main" java.lang.NullPointerException
	at com.zjq.javabase.base05.demo03.Demo02ArrayNull.main(Demo02ArrayNull.java:20)
           

數組周遊

數組周遊: 就是将數組中的每個元素分别擷取出來,就是周遊。周遊也是數組操作中的基石。

public static void main(String[] args) {
    int[] arr = { 1, 2, 3, 4, 5 };
    System.out.println(arr[0]);
    System.out.println(arr[1]);
    System.out.println(arr[2]);
    System.out.println(arr[3]);
    System.out.println(arr[4]);
}
           

以上代碼是可以将數組中每個元素全部周遊出來,但是如果數組元素非常多,這種寫法肯定不行,是以我們需要改造成循環的寫法。數組的索引是0 到lenght-1 ,可以作為循環的條件出現。

public static void main(String[] args) {
    int[] arr = { 1, 2, 3, 4, 5 };
    for (int i = 0; i < arr.length; i++) {
        System.out.println(arr[i]);
    }
}
           

數組擷取最大值元素

最大值擷取:從數組的所有元素中找出最大值。

實作思路:

  • 定義變量,儲存數組0索引上的元素
  • 周遊數組,擷取出數組中的每個元素
  • 将周遊到的元素和儲存數組0索引上值的變量進行比較
  • 如果數組元素的值大于了變量的值,變量記錄住新的值
  • 數組循環周遊結束,變量儲存的就是數組中的最大值

代碼實作如下:

public static void main(String[] args) {
        int[] array = { 5, 15, 30, 20, 10000, 30, 35 };

        int max = array[0]; // 比武擂台
        for (int i = 1; i < array.length; i++) {
            // 如果目前元素,比max更大,則換人
            if (array[i] > max) {
                max = array[i];
            }
        }
        // 誰最後最厲害,就能在max當中留下誰的戰鬥力
        System.out.println("最大值:" + max);
    }
           

數組反轉

數組的反轉: 數組中的元素颠倒順序,例如原始數組為1,2,3,4,5,反轉後的數組為5,4,3,2,1

實作思想:數組最遠端的元素互換位置。

  • 實作反轉,就需要将數組最遠端元素位置交換
  • 定義兩個變量,儲存數組的最小索引和最大索引
  • 兩個索引上的元素交換位置
  • 最小索引++,最大索引--,再次交換位置
  • 最小索引超過了最大索引,數組反轉操作結束

代碼實作:

public static void main(String[] args) {
    int[] arr = { 1, 2, 3, 4, 5 };
    /*
    循環中定義變量min=0最小索引
    max=arr.length‐1最大索引
    min++,max‐‐
    */
    for (int min = 0, max = arr.length ‐ 1; min <= max; min++, max‐‐) {
        //利用第三方變量完成數組中的元素交換
        int temp = arr[min];
        arr[min] = arr[max];
        arr[max] = temp;
    }
    // 反轉後,周遊數組
    for (int i = 0; i < arr.length; i++) {
        System.out.println(arr[i]);
    }
}
           

數組作為方法參數和傳回值

數組作為方法參數

以前的方法中我們學習了方法的參數和傳回值,但是使用的都是基本資料類型。那麼作為引用類型的數組能否作為方法的參數進行傳遞呢,當然是可以的。

數組作為方法參數傳遞,傳遞的參數是數組記憶體的位址。

public static void main(String[] args) {
    int[] arr = { 1, 3, 5, 7, 9 };
    //調用方法,傳遞數組
    printArray(arr);
}
/*
建立方法,方法接收數組類型的參數
進行數組的周遊
*/
public static void printArray(int[] arr) {
    for (int i = 0; i < arr.length; i++) {
        System.out.println(arr[i]);
    }
}
           

數組作為方法傳回值

public static void main(String[] args) {
    //調用方法,接收數組的傳回值
    //接收到的是數組的記憶體位址
    int[] arr = getArray();
    for (int i = 0; i < arr.length; i++) {
        System.out.println(arr[i]);
    }
}
/**
    建立方法,傳回值是數組類型
    return傳回數組的位址
*/
public static int[] getArray() {
    int[] arr = { 1, 3, 5, 7, 9 };
    //傳回數組的位址,傳回到調用者
    return arr;
}