type[] var; // 推薦風格 type var[]; // C 風格
聲明時不可指定長度,需使用 new 創建對象:var = new type[length]
int[] a = new int[3]; a[0]=0; a[1]=1; a[2]=2;
int[] a = {0,1,2};
Time[] times = {new Time(19,42,42), ...};
int 為 0,引用類型為 null)Java 中多維數組本質是「數組的數組」,各維度長度可不一致。
// 靜態初始化
int[][] matrix = {{1,2},{3,4,5},{6,7,8,9}};
// 動態初始化:先分配行,再為每行分配列
String[][] str = new String[3][];
str[0] = new String[2];
str[1] = new String[3];
str[2] = new String[2];
for (int i=0; i
元素訪問與 length 屬性
arr.length 表示行數
arr[i].length 表示第 i 行的列數
實戰案例:矩陣乘法
public class MatrixMultiply {
public static void main(String[] args) {
int[][] a = new int[2][3];
int[][] b = {{1,5,2,8},{5,9,10,-3},{2,7,-5,-18}};
int[][] c = new int[2][4];
// 初始化 a
for (int i=0; i<2; i++)
for (int j=0; j<3; j++)
a[i][j] = (i+1)*(j+2);
// 矩陣相乘 c = a * b
for (int i=0; i<2; i++) {
for (int j=0; j<4; j++) {
c[i][j] = 0;
for (int k=0; k<3; k++)
c[i][j] += a[i][k] * b[k][j];
}
}
// 輸出結果
for (int i=0; i<2; i++) {
for (int j=0; j<4; j++) System.out.print(c[i][j] + " ");
System.out.println();
}
}
}
常見陷阱
- 引用類型數組動態初始化時,需為每個元素單獨
new 對象
- 越界訪問拋出
ArrayIndexOutOfBoundsException
- 多維數組內存不連續,不可用
Arrays.copyOf 直接複製深層