多維數組的使用(二維數組)

  • Java語言裏提供了支持多維數組的語法。

  • 如果說可以把一維數組當成幾何中的線性圖形,那麼二維數組就相當於是一個表格,像Excel中的表格一樣。

  • 對於二維數組的理解,我們可以看成是一維數組array1又作爲另一個一維數組array2的元素而存在。其實,從數組底層的運行機制來看,其實沒有多維數組。

二維數組的使用:

規定:二維數組分爲外層數組的元素,內層數組的元素

  •  int[][] arr = new int[4][3];
    
  •  外層元素:arr[0],arr[1]等
    
  •  內層元素:arr[0][0],arr[1][2]等
    

1、理解:對於二維數組的理解,我們可以看成是一維數組array1又作爲另一個一維數組array2的元素而存在。從數組底層的運行機制來看,其實沒有多維數組。

如何理解二維數組?

數組屬於引用數據類型
數組的元素也可以是引用數據類型
一個一維數組A的元素如果還是一個一維數組類型的,則,此數組A稱爲二維數組。

2、二維數組的使用:

  • ① 二維數組的聲明和初始化
  • ② 如何調用數組的指定位置的元素
  • ③ 如何獲取數組的長度
  • ④ 如何遍歷數組
  • ⑤ 數組元素的默認初始化值 :
  • ⑥ 數組的內存解析 :
public class Test {
	public static void main(String[] args) {
		//1.二維數組的聲明和初始化
		//一維數組的靜態初始化和二維數組的靜態初始化相類似。
		int[] arr = new int[]{1,2,3};//舉例:一維數組的靜態初始化
		int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};//二維數組的靜態初始化
		
		//動態初始化方式1
		String[][] arr2 = new String[3][2];
		//動態初始化方式2
		String[][] arr3 = new String[3][];
		
		//錯誤的情況 
//		String[][] arr4 = new String[][4];
//		String[4][3] arr5 = new String[]0[];
//		int[][] arr6 = new int[4][3]{{1,2,3},{4,5},{6,7,8}};
		
		//正確寫法:
		int[][] arr4 = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}};//標準寫法。
		//int arr4[][] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}};
		//int[] arr4[] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}};
		//int[] arr4[] = {{1,2,3},{4,5},{6,7,8}};
		
		//2.如何調用數組的指定位置的元素
		System.out.println(arr1[0][1]);//2,將arr1中的2進行輸出
		System.out.println(arr2[1][1]);//null,想要輸出arr2中第二行第二列,我們雖然沒有對其進行賦值,但是String已經對其賦值,即爲null
		
		//System.out.println(arr3[1][0]);不能這樣寫,會報錯,因爲arr3中的列爲空,沒有指定(賦值)過。
		//所以要先對arr3進行指定(賦值),在進行調用。
		
		arr3[1] = new String[4];
		System.out.println(arr3[1][0]);
		
		//3.獲取數組的長度
		System.out.println(arr4.length);//3
		System.out.println(arr4[0].length);//3
		System.out.println(arr4[1].length);//4
		
		//4.如何遍歷二維數組
		for(int i = 0;i < arr4.length;i++){
			
			for(int j = 0;j < arr4[i].length;j++){
				System.out.print(arr4[i][j] + "  ");
			}
			System.out.println();
		}
		
	}
}

規定:二維數組分爲外層數組的元素,內層數組的元素
int[][] arr = new int[4][3];
外層元素:arr[0],arr[1]等
內層元素:arr[0][0],arr[1][2]等

⑤ 數組元素的默認初始化值 :(外層元素和內層元素的初始化值有區別)
只能拿動態初始化值來說明,因爲靜態的已經確認了,看不到。

針對於初始化方式一:比如:

  •  int[][] arr = new int[4][3];
    
  •  外層元素的初始化值爲:地址值
    
  •  內層元素的初始化值爲:與一維數組初始化情況相同
    

    針對於初始化方式二:比如:

  •  int[][] arr = new int[4][];
    
  •  外層元素的初始化值爲:null
    
  •  內層元素的初始化值爲:不能調用,否則報錯。
    
public class Test {
	public static void main(String[] args) {
		
		int[][] arr = new int[4][3];
		System.out.println(arr[0]);//[I@15db9742 ,輸出的是地址值。
		System.out.println(arr[0][0]);//0
		
//		System.out.println(arr);//[[I@6d06d69c ,輸出的是二維數組的地址值因爲有兩個[[
		
		System.out.println("*****************");//分隔線
		
		float[][] arr1 = new float[4][3];
		System.out.println(arr1[0]);//輸出的還是地址值
		System.out.println(arr1[0][0]);//0.0
		
		System.out.println("*****************");//分隔線
		
		String[][] arr2 = new String[4][2];
		System.out.println(arr2[1]);//地址值  ,還是一維數組的地址值
		System.out.println(arr2[1][1]);//null ,沒有給過定義,還是String給的定義
		
		System.out.println("*****************");//分隔線
		
		//特殊情況
	
		double[][] arr3 = new double[4][];
		System.out.println(arr3[1]);//null
//		System.out.println(arr3[1][0]);//報錯,沒有給過定義,空指針異常
		
	}
}

⑥ 數組的內存解析 :

第一行代碼的解釋。
在這裏插入圖片描述
堆地址值0×1234賦值給棧空間的arr1,然後通過地址值,棧空間的arr1可以指向堆空間的地址值
而且因爲是int[4][ ],後面的[]沒有寫,意味着堆裏面的每一項(圖中的4個格子)沒有初始化(賦過值)。所以此時裏面應該是null

第二行代碼的解釋:
因爲又新建了一個值 arr1[1] = new int[]{1,2,3}
所以又重新開闢了一個新的數組,重新給予了地址值0×7788。
數組中原始的應該是0,但我們給了值,所以應該是1,2,3。
在這裏插入圖片描述

第三行代碼的解釋:
在這裏插入圖片描述
第四行代碼的解釋:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章