在Java中,二維數(shù)組被看作數(shù)組的數(shù)組,即二維數(shù)組是一個特殊的一維數(shù)組,二維數(shù)組的每個元素都是一個一維數(shù)組。
1.二維數(shù)組的定義
1)格式一:
元素的數(shù)據(jù)類型[][] 數(shù)組的名字 = new 元素的數(shù)據(jù)類型[二維數(shù)組的長度][一維數(shù)組的長度];
int[][] arr = new int[3][2];
以上這種情況代表有3個一維數(shù)組,且每個一維數(shù)組有2個元素。
2)格式二:
元素的數(shù)據(jù)類型[][] 數(shù)組的名字 = new 元素的數(shù)據(jù)類型[二維數(shù)組的長度][];
int[][] arr = new int[3][];
以上這種情況代表有3個一維數(shù)組,但每個一維數(shù)組的元素個數(shù)不確定,且每個一維數(shù)組的元素個數(shù)可以不一樣。
3)格式三:
元素的數(shù)據(jù)類型[][] 數(shù)組的名字 = {{元素1,元素2,…},{元素1,元素2,…},…};
int[][] arr = {{1,2,3},{4,5},{6,7,8,9}};
以上這種情況代表有3個一維數(shù)組,第一個一維數(shù)組中有3個元素,第二個一維數(shù)組中有2個元素,第三個一維數(shù)組中有4個元素,每個一維數(shù)組的元素個數(shù)可以不一樣。
2.二維數(shù)組的聲明
聲明二維數(shù)組有下列兩種格式:
數(shù)組的元素類型 數(shù)組名[][];
數(shù)組的元素類型 [][] 數(shù)組名;
例如:
char cat[][]; char [][] cat;
3.二維數(shù)組的初始化
二維數(shù)組的初始化同一維數(shù)組一樣,有兩種方式:動態(tài)初始化和靜態(tài)初始化。
(1) 靜態(tài)初始化
1)先聲明再靜態(tài)初始化
元素的數(shù)據(jù)類型[][] 二維數(shù)組名; 二維數(shù)組名 = new 元素的數(shù)據(jù)類型[][]{{元素1,元素2,元素3,…},{第二行的值列表},…,{第n行的值列表}};
2)聲明的同時靜態(tài)初始化
元素的數(shù)據(jù)類型[][] 二維數(shù)組名 = new 元素的數(shù)據(jù)類型[][]{{元素1,元素2,元素3,…},{第二行的值列表},…,{第n行的值列表}};
注意:右邊“new 元素的數(shù)據(jù)類型[][]”中“[][]”中不能寫數(shù)字,因為行數(shù)和列數(shù)由{}中的元素個數(shù)決定。
3)聲明的同時靜態(tài)初始化的簡化寫法
元素的數(shù)據(jù)類型[][] 二維數(shù)組名 = {{元素1,元素2,元素3,…},{第二行的值列表},…,{第n行的值列表}};
例如:
public class Main { public static void main(String[] args) { int[][] arr = {{1,2,3},{4,5},{6}}; //定義數(shù)組 System.out.println(arr[0][0]); //1 System.out.println(arr[1][0]); //4 System.out.println(arr[2][0]); //6 System.out.println(arr[0][1]); //2 System.out.println(arr[1][1]); //5 System.out.println(arr[2][1]); //越界 } }
(2) 動態(tài)初始化
動態(tài)初始化創(chuàng)建可以不用聲明里面一維數(shù)組的長度,因此,它每個一維數(shù)組長度可以不一樣,所以,就有了下面兩種初始化方式。
1)動態(tài)初始化一:規(guī)則二維表
程序員指定數(shù)組的長度,后期再賦值,一開始系統(tǒng)會先給定元素默認初始值,規(guī)則二維表也就意味著每一行的列數(shù)是相同的,其一般格式如下,首先確定行數(shù)和列數(shù):
元素的數(shù)據(jù)類型[][] 二維數(shù)組名 = new 元素的數(shù)據(jù)類型[m][n];
其中m表示這個二維數(shù)組有多少個一維數(shù)組,或者說二維表一共有幾行;n表示每個一維數(shù)組的元素有多少個,或者說每行有幾個單元格。
此時創(chuàng)建完數(shù)組,行數(shù)列數(shù)確定,而且元素也都有默認值,再為元素賦新值:
二維數(shù)組名[行下標][列下標] = 值;
例如:
public class Main { public static void main(String[] args) { int[][] arr = new int[3][2]; /* 定義一個二維數(shù)組arr 這個二維數(shù)組有3個一維數(shù)組的元素 每個一維數(shù)組有2個元素 */ System.out.println(arr); //輸出二維數(shù)組名稱 System.out.println(arr[0]); //輸出二維數(shù)組的第一個元素一維數(shù)組的名稱 System.out.println(arr[0][0]); //輸出二維數(shù)組的元素 } }
2)動態(tài)初始化二:不規(guī)則二維表
不規(guī)則二維表也就意味著每一行的列數(shù)可能不一樣,其一般格式如下,首先確定總行數(shù):
元素的數(shù)據(jù)類型[][] 二維數(shù)組名 = new 元素的數(shù)據(jù)類型[總行數(shù)][];
此時只是確定了總行數(shù),每一行里面現(xiàn)在是null,然后再確定每一行的列數(shù),創(chuàng)建每一行的一維數(shù)組:
二維數(shù)組名[行下標] = new 元素的數(shù)據(jù)類型[該行的總列數(shù)];
此時通過new的行的元素就有默認值,沒有通過new的行還是null,最后為元素賦值:
二維數(shù)組名[行下標][列下標] = 值;
注意:不規(guī)則二維表,聲明后,初始化內部一維數(shù)組時不能簡寫。
//不規(guī)則二維表定義二維數(shù)組 int[][] arr = new int[3][]; //3行,未知的列 //初始化二維數(shù)組內的元素值 arr[0] = new int[]{1}; //此處不能簡寫為arr[0] = {1} arr[1] = new int[]{2,3}; arr[2] = new int[]{4,5,6};
4.二維數(shù)組的遍歷
二維數(shù)組的遍歷和一維數(shù)組一樣,區(qū)別就是,首先要在外循環(huán),遍歷每個一維數(shù)組,其一般格式如下:
for(int i=0;i<二維數(shù)組名.length;i++) { for(int j=0;j<二維數(shù)組名[i].length;j++) { System.out.print(二維數(shù)組名[i][j]); } System.out.println(); }
C語言網提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習題和答疑,點擊了解:
一點編程也不會寫的:零基礎C語言學練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學奧賽或C++選手的 必學C++課程
藍橋杯ACM、信息學奧賽的必學課程:算法競賽課入門課程
手把手講解近五年真題的藍橋杯輔導課程