Java之二維數組基本使用
二維數組
1. 二維數組的使用
2. 使用方式 1: 動態初始化
3. 使用方式 2: 動態初始化
4. 使用方式 3: 動態初始化-列數不確
5. 使用方式 4: 靜態初始化
6. 二維數組的應用案例
7. 二維數組使用細節和注意事項
8. 二維數組課堂練習
二維數組
1. 二維數組的使用
2. 使用方式 1: 動態初始化
3. 使用方式 2: 動態初始化
4. 使用方式 3: 動態初始化-列數不確
5. 使用方式 4: 靜態初始化
6. 二維數組的應用案例
7. 二維數組使用細節和注意事項
8. 二維數組課堂練習
二維數組
二維數組的應用場景
比如我們開發一個五子棋游戲,棋盤就是需要二維數組來表示。如圖:
1. 二維數組的使用
快速入門案例:TwoDimensionalArray01.java
請用二維數組輸出如下圖形
0 0 0 0 0 0 0 0 1 0 0 0 0 2 0 3 0 0 0 0 0 0 0 0
//什么是二維數組: //1. 從定義形式上看 int[][] //2. 可以這樣理解,原來的一維數組的每個元素是一維數組, 就構成二維數組 int[][] arr = { {0, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0,2, 0, 3, 0, 0}, {0, 0, 0, 0, 0, 0} }; //輸出二維圖形 for(int i = 0; i < arr.length; i++) {//遍歷二維數組的每個元素 //遍歷二維數組的每個元素(數組) //解讀 //1. arr[i] 表示 二維數組的第i+1個元素 比如arr[0]:二維數組的第一個元素 //2. arr[i].length 得到 對應的 每個一維數組的長度 for(int j = 0; j < arr[i].length; j++) { System.out.print(arr[i][j] + " "); //輸出了一維數組 } System.out.println();//換行 }
舉例:訪問二位數組中值為 3 的數組坐標
//關于二維數組的關鍵概念 //(1) System.out.println("二維數組的元素個數=" + arr.length); //(2) 二維數組的每個元素是一維數組, 所以如果需要得到每個一維數組的值 // 還需要再次遍歷 //(3) 如果我們要訪問第 (i+1)個一維數組的第j+1個值 arr[i][j]; // 舉例 訪問 3, =》 它是第3個一維數組的第4個值 arr[3-1][4-1] = arr[2][3] System.out.println("第3個一維數組的第4個值=" + arr[2][3]); //3
3的值在二維數組里對應的第3行第4列的值,3對應的坐標本來是 arr[3][4],但數組是從0開始的,所以減1,就是arr[2][3],所以 3 對應的實際坐標就是arr[2][3]
2. 使用方式 1: 動態初始化
TwoDimensionalArray02.java
語法: 類型[][] 數組名=new 類型[大小][大小]
比如: int a[][]=new int[2][3],表示這個二位數組里面有兩個一維數組,而每個一維數組里有三個元素
使用演示
沒有賦值,默認值為 0
int arr[][] = new int[2][3]; //遍歷arr數組 for(int i = 0; i < arr.length; i++) { for(int j = 0; j < arr[i].length; j++) {//對每個一維數組遍歷 System.out.print(arr[i][j] +" "); } System.out.println();//換行 }
把上面的數組進行初始化賦值,arr[1][1] = 8 表示 在第二個一維數組的第二個元素的值為 8
int arr[][] = new int[2][3]; arr[1][1] = 8; //遍歷arr數組 for(int i = 0; i < arr.length; i++) { for(int j = 0; j < arr[i].length; j++) {//對每個一維數組遍歷 System.out.print(arr[i][j] +" "); } System.out.println();//換行 }
二維數組在內存的存在形式
3. 使用方式 2: 動態初始化
TwoDimensionalArray02.java
先聲明:類型 數組名[][];
再定義(開辟空間) 數組名 = new 類型[大小][大小];
賦值(有默認值,比如 int 類型的就是 0)
使用演示
int arr[][]; //聲明二維數組 arr = new int[2][3]; //再開空間
4. 使用方式 3: 動態初始化-列數不確
TwoDimensionalArray03
代碼實現:
/* 看一個需求:動態創建下面二維數組,并輸出 i = 0: 1 i = 1: 2 2 i = 2: 3 3 3 一個有三個一維數組, 每個一維數組的元素是不一樣的 */ //創建 二維數組,一個有3個一維數組,但是每個一維數組還沒有開數據空間 int[][] arr = new int[3][]; for(int i = 0; i < arr.length; i++) {//遍歷arr每個一維數組 //給每個一維數組開空間 new //如果沒有給一維數組 new ,那么 arr[i]就是null arr[i] = new int[i + 1]; //遍歷一維數組,并給一維數組的每個元素賦值 for(int j = 0; j < arr[i].length; j++) { arr[i][j] = i + 1;//賦值 } } System.out.println("=====arr元素====="); //遍歷arr輸出 for(int i = 0; i < arr.length; i++) { //輸出arr的每個一維數組 for(int j = 0; j < arr[i].length; j++) { System.out.print(arr[i][j] + " "); } System.out.println();//換行 }
5. 使用方式 4: 靜態初始化
TwoDimensionalArray04.java
定義 類型 數組名[][] = {{值 1,值 2..},{值 1,值 2..},{值 1,值 2..}}
使用即可 [ 固定方式訪問 ]
比如:
int[][] arr = {{1,1,1}, {8,8,9}, {100}};
解讀
定義了一個二維數組 arr
arr 有三個元素(每個元素都是一維數組)
第一個一維數組有 3 個元素 , 第二個一維數組有 3 個元素, 第三個一維數組有 1 個元素
案例:
TwoDimensionalArray05.java
int arr[][]={{4,6},{1,4,5,7},{-2}}; 遍歷該二維數組,并得到和
/* 思路 1. 遍歷二維數組,并將各個值累計到 int sum */ int arr[][]= {{4,6},{1,4,5,7},{-2}}; int sum = 0; for(int i = 0; i < arr.length; i++) { //遍歷每個一維數組 for(int j = 0; j < arr[i].length; j++) { sum += arr[i][j]; } } System.out.println("sum=" + sum);
6. 二維數組的應用案例
使用二維數組打印一個 10 行楊輝三角 YangHui.java
int[][] yangHui = new int[12][]; for(int i = 0; i < yangHui.length; i++) {//遍歷yangHui的每個元素 //給每個一維數組(行) 開空間 yangHui[i] = new int[i+1]; //給每個一維數組(行) 賦值 for(int j = 0; j < yangHui[i].length; j++){ //每一行的第一個元素和最后一個元素都是1 if(j == 0 || j == yangHui[i].length - 1) { yangHui[i][j] = 1; } else {//中間的元素 yangHui[i][j] = yangHui[i-1][j] + yangHui[i-1][j-1]; } } } //輸出楊輝三角 for(int i = 0; i < yangHui.length; i++) { for(int j = 0; j < yangHui[i].length; j++) {//遍歷輸出該行 System.out.print(yangHui[i][j] + "\t"); } System.out.println();//換行. }
7. 二維數組使用細節和注意事項
一維數組的聲明方式有:
int[] x 或者 int x[]
二維數組的聲明方式有:
int[][] y 或者 int[] y[] 或者 int y[][]
二維數組實際上是由多個一維數組組成的,它的各個一維數組的長度可以相同,也可以不相同。比如: map[][] 是一個二維數組
int map [][] = {{1,2},{3,4,5}}
由 map[0] 是一個含有兩個元素的一維數組 ,map[1] 是一個含有三個元素的一維數組構成,我們也稱為列數不等的二維數組
8. 二維數組課堂練習
Java 數據結構
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。