Bỏ qua để đến nội dung

Mảng nhiều chiều

Java thực chất mô phỏng mảng nhiều chiều bằng mảng của mảng - một mảng hai chiều int[][] thực chất là một mảng mà mỗi phần tử của nó lại là một mảng int[]:

int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
System.out.println(matrix[0][0]); // 1 - hàng 0, cột 0
System.out.println(matrix[1][2]); // 6 - hàng 1, cột 2
int[][] grid = new int[3][4]; // 3 hàng, 4 cột, mặc định toàn 0
grid[0][0] = 1;
grid[2][3] = 99;
int[][] matrix = {
{1, 2, 3},
{4, 5, 6}
};
for (int i = 0; i < matrix.length; i++) { // matrix.length = số hàng
for (int j = 0; j < matrix[i].length; j++) { // matrix[i].length = số cột của hàng i
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
// Hoặc dùng for-each lồng nhau
for (int[] row : matrix) {
for (int value : row) {
System.out.print(value + " ");
}
System.out.println();
}

Vì mảng nhiều chiều thực chất là “mảng của mảng”, các hàng không bắt buộc phải cùng độ dài:

int[][] jagged = new int[3][]; // 3 hàng, chưa xác định độ dài từng hàng
jagged[0] = new int[]{1, 2};
jagged[1] = new int[]{1, 2, 3, 4};
jagged[2] = new int[]{1};
for (int[] row : jagged) {
System.out.println(Arrays.toString(row));
}
// [1, 2]
// [1, 2, 3, 4]
// [1]

5. In mảng nhiều chiều với Arrays.deepToString

Phần tiêu đề “5. In mảng nhiều chiều với Arrays.deepToString”

Arrays.toString() chỉ hoạt động đúng với mảng một chiều - với mảng nhiều chiều, cần Arrays.deepToString():

import java.util.Arrays;
int[][] matrix = {{1, 2}, {3, 4}};
System.out.println(Arrays.toString(matrix)); // [[I@..., [I@...] - KHÔNG như mong đợi!
System.out.println(Arrays.deepToString(matrix)); // [[1, 2], [3, 4]] - đúng như mong đợi
  • Mảng nhiều chiều trong Java là “mảng của mảng”, khai báo <kiểu>[][] tên
  • matrix.length là số hàng, matrix[i].length là số cột của hàng i
  • Các hàng có thể có độ dài khác nhau (mảng răng cưa - jagged array)
  • Dùng Arrays.deepToString() để in mảng nhiều chiều đúng định dạng