二維數組
一、二維數組
1、二維數組的含義:
就是元素是一維數組的數組
舉例:
{{11,22},{11,33},{55,88}}
2、二維數組的定義格式:
格式1:
數據類型[][] 變量名 = new 數據類型[m][n];
左邊:
數據類型:表示最終元素的數據類型
[][]:表示是一個二維數組
變量名:二維數組的名稱
右邊:
new:表示為二維數組分配內存空間
[m]:表示這個二維數組中有個元素,其中元素表示的是m個一維數組
[n]:表示的是每一個一維數組中有n個元素,元素的數據類型與定義時的數據類型一致
舉例:int[][] arr = new int[3][2]
解釋:表示的是定義了一個名為arr的二維數組,元素是由3個一維數組組成,其中
每個一維數組的元素的個數為2個
==================================================================================
格式2:
數據類型[][] 變量名 = new 數據類型[m][]
右邊:
[]:這里暫時不將每個一維數組中的元素個數寫死,以將來傳入的一維數組元素個數而定
舉例:
int[][] arr = new int[3][]
==================================================================================
格式3:
數據類型[][] 變量名 = new 數據類型[][]{{元素…},{元素…},{元素…},...}
舉例:
int[][] arr = new int[][]{{1,2},{11,22,33},{100,200,300},{10,20}};
簡化格式:
數據類型[][] 變量名 = {{元素…},{元素…},{元素…},...};
舉例:
int[][] arr = {{1,2},{11,22,33},{100,200,300},{10,20}};
====================================================================================
3、注意格式的轉換:
以下定義的格式也算正確(不推薦使用)
數據類型 變量名[][] = new 數據類型[m][n];
數據類型[] 變量名[] = new 數據類型[m][n];
舉例:int[][] arr = new int[2][3]; (推薦第一種)
int arr[][] = new int[3][4];
int[] arr[] = new int[2][3];
4、第一種格式:
獲取二維數組中元素的地址值,此地址值就是一維數組的地址值
public class Array2Demo1 {
public static void main(String[] args) {
//使用第一種格式定義一個二維數組,每一個一維數組的元素個數為2
int[][] arr = new int[3][2];
//3代表的是由三個一維數組組成
//2代表的是每一個一維數組的元素個數為2個
//按照之前的輸出格式,我們先輸出名字
System.out.println(arr); //輸出的是二維數組在堆內存中的地址值 [[I@1540e19d
System.out.println(arr[0]);//輸出的是第一個一維數組在內存中的地址值 [I@677327b6
System.out.println(arr[1]);//輸出的是第二個一維數組在內存中的地址值 [I@14ae5a5
System.out.println(arr[2]);//輸出的是第三個一維數組在內存中的地址值 [I@7f31245a
5、獲取元素的方法
public class Array2Demo1 {
public static void main(String[] args) {
//使用第一種格式定義一個二維數組,每一個一維數組的元素個數為2
int[][] arr = new int[3][2];
//數組獲取元素的方法是通過索引獲取
System.out.println(arr[0][0]); //0 //輸出的是第一個一維數組中第一個元素值
System.out.println(arr[0][1]); //0 //輸出的是第一個一維數組中第二個元素值
System.out.println(arr[2][1]); //0 //輸出的是第三個一維數組的第二個元素值
當使用兩種不同格式定義二維數組,未賦值之前,二者輸出的地址值不同
6、第二種格式:
public class Array2Demo2 {
public static void main(String[] args) {
//使用第二種格式定義一個二維數組,每一個一維數組的元素個數沒有定
int[][] arr = new int[3][];
System.out.println(arr); //輸出的是二維數組本身的地址值 [[I@1540e19d
System.out.println(arr[0]); //輸出的是二維數組中第一個一維數組的地址值 null
System.out.println(arr[1]); //輸出的是二維數組中第二個一維數組的地址值 null
System.out.println(arr[2]); //輸出的是二維數組中第三個一維數組的地址值 null
=======================給二維數組的元素賦值================================
//初始化一個元素個數為2個的一維數組,賦值給二維數組中第一個元素
arr[0] = new int[2];
//初始化一個元素個數為3個的一維數組,賦值給二維數組中第二個元素
arr[1] = new int[3];
//初始化一個元素個數為4個的一維數組,賦值給二維數組中第三個元素
arr[2] = new int[4];
==========================賦值后地址值不是null===================================
System.out.println(arr); //輸出的是二維數組本身的地址值 [[I@1540e19d
System.out.println(arr[0]); //輸出的是二維數組中第一個一維數組的地址值 [I@677327b6
System.out.println(arr[1]); //輸出的是二維數組中第二個一維數組的地址值 [I@14ae5a5
System.out.println(arr[2]); //輸出的是二維數組中第三個一維數組的地址值[I@7f31245a
//獲取二維數組中第二個一維數組中的第1個元素
System.out.println(arr[1][0]); //默認為0
7、第三種格式:
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]); //輸出二維數組中第四個一維數組的地址值
二、二維數組的遍歷以及包裝
1、需要兩個for循環:
外部for循環遍歷獲取的是每一個一維數組
內部for循環遍歷的是獲取到的每一個一維數組中每個元素值
二維數組遍歷
int[][] arr = {{1,2},{11,22,33},{100,200,300},{10,20,30,40}};
分析:
1、先獲取每一個一維數組
2、一次遍歷每一個一維數組中的元素值
public class Array2Test1 {
public static void main(String[] args) {
//定義一個二維數組
int[][] arr ={{1,2},{11,22,33},{10,20,30,40}};
for(int i =0;i<arr.length;i++){ //外層for獲取每一個一維數組
for(int j=0;j<arr[i].length;j++){ //內層for獲取每一個一維數組的元素值
if(j==0){
System.out.print("["+arr[i][j]+","); //遍歷包裝,為了美觀
}else if(j==arr[i].length-1){
System.out.print(arr[i][j]+"]"); //遍歷包裝,為了美觀
}else{
System.out.print(arr[i][j]+","); //中間數直接輸出,不需要包裝
}
}
}
}
}
執行結果如下:
[1,2][11,22,33][10,20,30,40]
Process finished with exit code 0
1