1.數組定義格式分為動態和靜態
(1)靜態初始化的格式:兩種
數據類型[] 數組名 = new 數據類型[]{元素1, 元素2, 元素3...}
//示例
int[] arr = new int[]{10,20,30,40};
數據類型[] 數組名 = {元素1, 元素2, 元素3...};
//示例
int[] arr = {10,20,30,40};
(2)數組的動態定義格式
-
-
-
數據類型[] 數組名 = new 數據類型[數組長度];
-
數據類型 變量名[] = new 數據類型[數組長度];了解即可
-
//數組動態初始化
-
//示例
//定義長度為3的int數組
int[] arr = new int[3];//定義長度為5的double數組
double[] arr = new double[5];//定義長度為5的char數組
char[] arr = new char[5];//定義長度為4的字符串數組
String[] arr = new String[4];
-
-
(3)
數組的索引是從0開始,每次+1.
=============================================
2.多維數組
多維數組聲明
數據類型[][] 數組名稱;
數據類型[] 數組名稱[];
數據類型數組名稱[][];
以上三種語法在聲明二維數組時的功能是等價的。同理,聲明三維數組時需要三對中括號,中括號的位置可以在數據類型的后面,也可以在數組名稱的后面,其它的依次類推。
例如:
int[][] map;
char c[][];
和一維數組一樣,數組聲明以后在內存中沒有分配具體的存儲空間,也沒有設定數組的長度。
-----------------------------------------------------------------------------------------------------------------------------------------------------------
多維數組初始化
和一維數組一樣,多維數組的初始化也可以分為靜態初始化(整體賦值)和動態初始化兩種,其語法格式如下。
靜態初始化
以二維數組的靜態初始化為例,來說明多維數組靜態初始化的語法格式。
示例代碼如下:
int[][] m = {{1,2,3},{2,3,4}};
在二維數組靜態初始化時,也必須和數組的聲明寫在一起。數值書寫時,使用兩個大括號嵌套實現,在最里層的大括號內部書寫數字的值。數值和數值之間使用逗號分隔,內部的大括號之間也使用逗號分隔。由該語法可以看出,內部的大括號其實就是一個一維數組的靜態初始化,二維數組只是把多個一維數組的靜態初始化組合起來。
同理,三維數組的靜態初始化語法格式如下:
int[][][] b = {{{1,2,3},{1,2,3}},{{3,4,1},{2,3,4}}};
說明:這里只是演示語法格式,數值本身沒有意義。
動態初始化
二維數組動態初始化的語法格式:
數據類型[][] 數組名稱= new 數據類型[第一維的長度][第二維的長度];
數據類型[][] 數組名稱;
數組名稱= new 數據類型[第一維的長度][第二維的長度];
示例代碼:
byte[][] b = new byte[2][3];
int m[][];
m = new int[4][4];
和一維數組一樣,動態初始化可以和數組的聲明分開,動態初始化只指定數組的長度,數組中每個元素的初始化是數組聲明時數據類型的默認值。例如上面初始化了長度為2X3 的數組b,和4X4 的數組m。使用這種方法,初始化出的第二維的長度都是相同的,如果需要初始化第二維長度不一樣的二維數組,則可以使用如下的格式:
int n[][];
n = new int[2][]; //只初始化第一維的長度
//分別初始化后續的元素
n[0] = new int[4];
n[1] = new int[3];
這里的語法就體現了數組的數組概念,在初始化第一維的長度時,其實就是把數組n 看成了一個一維數組,初始化其長度為2,則數組n 中包含的2個元素分別是n[0]和n[1],而這兩個元素分別是一個一維數組。后面使用一維數組動態初始化的語法分別初始化n[0]和n[1]。
----------------------------------------------------------------------------------------------------------------------------------------------------------------
引用數組元素
對於二維數組來說,由於其有兩個下標,所以引用數組元素值的格式為:
數組名稱[第一維下標][第二維下標]
該表達式的類型和聲明數組時的數據類型相同。例如引用二維數組m中的元素時,使用m[0][0]引用數組中第一維下標是0,第二維下標也是0 的元素。這里第一維下標的區間是0 到第一維的長度減1,第二維下標的區間是0 到第二維的長度減1。
---------------------------------------------------------------------------------------------------------------------------------------------------------------
獲得數組長度
對於多維數組來說,也可以獲得數組的長度。但是使用數組名.length獲得的是數組第一維的長度。如果需要獲得二維數組中總的元素個數,可以使用如下代碼:
int[][] m = {{1,2,3,1},{1,3},{3,4,2}};
int sum = 0;
for(int i = 0;i < m.length;i++){ //循環第一維下標
sum += m[i].length; //第二維的長度相加
}
在該代碼中,m.length 代表m 數組第一維的長度,內部的m[i]指每個一維數組元素,m[i].length 是m[i]數組的長度,把這些長度相加就是數組m中總的元素個數。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
多維數組使用示例
多維數組在實際使用時,更多的在於數組的設計,在實際使用中,一般對於多維數組的統計相對來說比一維數組要少一些,更多的設計數組的大小,並規定數組中存儲值的含義,在代碼中按照值的規定使用數組。
所以在實際使用多維數組以前,需要考慮清楚:
① 需要幾維數組
② 每一維的長度是多少
③ 按照怎樣的規則存儲值
④ 數組值的意義是什么
拉丁方陣
要求:實現任意階拉丁矩陣的存儲和輸出拉丁矩陣是一種規則的數值序列,例如4 階的拉丁矩陣如下所示:
1 2 3 4
2 3 4 1
3 4 1 2
4 1 2 3
該矩陣中的數字很規則,在實際解決該問題時,只需要把數值的規律描述出來即可。
實現思路:聲明一個變量n,代表矩陣的階,聲明和初始化一個nXn 的數組,根據數據的規律,則對應的數值為(行號+ 列號+ 1),當數值比n 大時,取和n的余數。
實現的代碼如下:
int n = 6;
int[][] arr = new int[n][n];
int data; //數值
//循環賦值
for(int row = 0;row < arr.length;row++){
for(int col = 0;col <arr[row].length;col++){
data = row + col + 1;
if(data <= n){
arr[row][col] = data;
}else{
arr[row][col] = data %n;
}
}
}
//輸出數組的值
for(int row = 0;row < arr.length;row++){
for(int col = 0;col <arr[row].length;col++){
System.out.print(arr[row][col]);
System.out.print(' ');
}
System.out.println();
}
該代碼中變量data 存儲行號+列號+1 的值,每次在賦值時判別data的值是否小於等於n,根據判斷的結果賦值對應數組元素的值。
在解決實際問題時,觀察數字規律,並且把該規律使用程序進行表達,也是每個程序員需要的基本技能