Java學習筆記32——二維陣列
阿新 • • 發佈:2021-12-01
二維陣列
概述
二維陣列:
就是元素是一維陣列的陣列
舉例:
二班
{{小王,小李},{小劉,小明},{小朱,小偉}}
二維陣列的定義格式
格式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]); } }