1. 程式人生 > 其它 >Java學習筆記32——二維陣列

Java學習筆記32——二維陣列

二維陣列

概述

        二維陣列:
            就是元素是一維陣列的陣列

         舉例:
            二班
                {{小王,小李},{小劉,小明},{小朱,小偉}}

       

二維陣列的定義格式

格式1
/*
資料型別[][] 變數名 = new 資料型別[m][n];
                左邊:
                    資料型別:表示最終元素的資料型別
                    [][]:表示是一個二維陣列
                    變數名:二維陣列的名稱
                右邊:
                    new:表示為二維陣列分配記憶體空間
                    [m]:表示這個二維陣列中有個元素,其中元素表示的是m個一維陣列
                    [n]:表示的是每一個一維陣列中有n個元素,元素的資料型別與定義時的資料型別一致

               舉例:int[][] arr = new int[3][2]
                    解釋:表示的是定義了一個名為arr的二維陣列,元素是由3個一維陣列組成,其中
                        每個一維陣列的元素的個數為2個
                        {{1,2},{3,4},{5,6}}

               注意格式的轉換:
                    1、今後開發的時候就按照我給的格式去定義,但是看到以下定義的格式也算正確
                        a: 資料型別 變數名[][] = new 資料型別[m][n];
                        b: 資料型別[] 變數名[] = new 資料型別[m][n];
                    舉例:int[][] arr = new int[2][3]; (推薦第一種)
                          int arr[][] = new int[3][4];
                          int[] arr[] = new int[2][3];
 */
public class Array2Demo1 {
    public static void main(String[] args) {
        //定義一個二維陣列
        int[][] arr = new int[3][2];
        //3代表的是由三個一維陣列組成
        //2代表的是每一個一維陣列的元素個數為2個
        //按照之前的輸出格式,我們先輸出名字
        System.out.println(arr); //[[I@4554617c //輸出的是二維陣列在堆記憶體中的地址值
        System.out.println(arr[0]); //[I@74a14482 //輸出的是第一個一維陣列在記憶體中的地址值
        System.out.println(arr[1]); //[I@1540e19d //輸出的是第二個一維陣列在記憶體中的地址值
        System.out.println(arr[2]); //[I@677327b6 //輸出的是第三個一維陣列在記憶體中的地址值

        //陣列獲取元素的方法是,通過索引獲取
        System.out.println(arr[0][0]); //0  //輸出的是第一個一維陣列中第一個元素值
        System.out.println(arr[0][1]); //0  //輸出的是第一個一維陣列中第二個元素值

        //ArrayIndexOutOfBoundsException: 2
//        System.out.println(arr[0][2]);

        //輸出第三個一維陣列的第二個元素值
        System.out.println(arr[2][1]);
    }
}
格式2
/*
資料型別[][] 變數名 = new 資料型別[m][];
        左邊:
             資料型別:表示最終元素的資料型別
             [][]:表示是一個二維陣列
             變數名:二維陣列的名稱
        右邊:
            new:為二維陣列開闢堆記憶體空間
            資料型別:表示的是最終元素的資料型別,每個一維陣列中元素資料型別
            [m]:這個二維資料由m個一維陣列組成
            []:這裡暫時將每個一維陣列中的元素個數寫死,以將來傳入的一維陣列元素個數而定
        舉例:
            int[][] arr = new int[3][]
*/

public class Array2Demo2 {
    public static void main(String[] args) {
        //使用第二種格式定義一個二維陣列
        int[][] arr = new int[3][];
        //表示的是定義了一個二維陣列,由3個一維陣列當作元素組成
        //只不過每一個一維陣列的元素個數沒有定
        System.out.println(arr); //輸出的是二維陣列本身的地址值
        System.out.println(arr[0]); //輸出的是二維陣列中第一個一維陣列的地址值 null
        System.out.println(arr[1]); //輸出的是二維陣列中第二個一維陣列的地址值 null
        System.out.println(arr[2]); //輸出的是二維陣列中第三個一維陣列的地址值 null

        //java.lang.NullPointerException 空指標異常
//        System.out.println(arr[0][0]);

        //將二維陣列中每一個元素新增一個一維陣列
        //初始化一個元素個數為2個的一維陣列,賦值給二維陣列中第一個元素
        arr[0] = new int[2];
        //初始化一個元素個數為3個的一維陣列,賦值給二維陣列中第二個元素
        arr[1] = new int[3];
        //初始化一個元素個數為4個的一維陣列,賦值給二維陣列中第三個元素
        arr[2] = new int[4];

        System.out.println(arr); //輸出的是二維陣列本身的地址值
        System.out.println(arr[0]); //輸出的是二維陣列中第一個一維陣列的地址值
        System.out.println(arr[1]); //輸出的是二維陣列中第二個一維陣列的地址值
        System.out.println(arr[2]); //輸出的是二維陣列中第三個一維陣列的地址值

        //獲取二維陣列中第二個一維陣列中的第1個元素
        System.out.println(arr[1][0])
    }
}
格式3
/*
        二維陣列定義的第三種格式:
            格式3:
            資料型別[][] 變數名 = new 資料型別[][]{{元素…},{元素…},{元素…},...};
        左邊:
             資料型別:表示最終元素的資料型別
             [][]:表示是一個二維陣列
             變數名:二維陣列的名稱
        右邊:
            new:為二維陣列在堆記憶體中開闢空間
            資料型別:表示的是最終每個一維陣列中元素的資料型別
            [][]:表示的是一個二維陣列
            {{元素…},{元素…},{元素…},...}:
                表示的是將來自定義多少個一維陣列,以及每個一維陣列中的元素個數也可以不一樣
        舉例:
            int[][] arr = new int[][]{{1,2},{11,22,33},{100,200,300},{10,20}};
            表示的是定義一個二維陣列,二維陣列中的元素是由4個一維陣列組成,
            每個一維陣列中的元素個數不一樣。
            有點類似於一維陣列的靜態初始化,前兩個格式有點類似於一維陣列的動態初始化。
        簡化格式:
            資料型別[][] 變數名 = {{元素…},{元素…},{元素…},...};
            舉例:
                int[][] arr = {{1,2},{11,22,33},{100,200,300},{10,20}};


        錯誤的格式:
            不能和格式1,格式2混合使用
            int[][] arr = new int[3][]{{1,2},{11,22,33},{100,200,300},{10,20}};


 */
public class Array2Demo3 {
    public static void main(String[] args) {
        //使用二維陣列定義格式2定義
        int[][] arr = {{1,2},{11,22,33},{100,200,300},{10,20,30,40}};

        System.out.println(arr); //輸出二維陣列本身的地址值
        System.out.println(arr[0]); //輸出二維陣列中第一個一維陣列的地址值
        System.out.println(arr[1]); //輸出二維陣列中第二個一維陣列的地址值
        System.out.println(arr[2]); //輸出二維陣列中第三個一維陣列的地址值
        System.out.println(arr[3]); //輸出二維陣列中第四個一維陣列的地址值

        //輸出二維陣列中第一個一維陣列中的第一個元素值
        System.out.println(arr[0][0]);
        //輸出二維陣列中第一個一維陣列中的第二個元素值
        System.out.println(arr[0][1]);

        //輸出二維陣列中第三個一維陣列中的第一個元素值
        System.out.println(arr[2][0]);
        //輸出二維陣列中第四個一維陣列中的第三個元素值
        System.out.println(arr[3][2]);


    }
}