"Xin chào, học sinh rất thông minh của tôi!"

"Xin chào, Rishi!"

"Bạn đang mong chờ một cuộc thảo luận mới về mảng? Chà, hôm nay chúng tôi có một cuộc thảo luận dành cho bạn! Hôm nay tôi sẽ nói với bạn về mảng răng cưa và mảng đa chiều."

"Nghe có vẻ khát máu và đáng sợ."

"Đừng lo lắng, một lập trình viên thực thụ luôn có thể xử lý một mảng, ngay cả khi nó nhe răng ra. Bỏ qua một bên chuyện cười, độ lởm chởm của một mảng phản ánh khả năng không chỉ hoán đổi các hàng của một mảng hai chiều mà còn để xây dựng một mảng tuy nhiên nó cần phải được.

"Giả sử bạn muốn hàng đầu tiên của mảng hai chiều có độ dài là 10 và hàng thứ hai là 50."

"Bạn thực sự có thể làm điều đó?"

"Chắc chắn rồi! Đầu tiên, chúng tôi tạo một 'vùng chứa các vùng chứa' — đây là mảng đầu tiên, mảng này sẽ lưu trữ các tham chiếu đến các mảng hàng. Đây là cách nó được thực hiện:

int[][] name = new int[height][];

"Bạn chỉ cần bỏ qua chiều thứ hai và máy Java sẽ tạo một thùng chứa các thùng chứa. Đây là những gì sẽ có trong bộ nhớ sau khi thực thi mã này:

"Và, bạn đã biết cách tạo mảng một chiều 🙂

Đây là mã kết quả sẽ trông như thế nào:

// Matrix of important data
int[][] matrix = new int[2][];
matrix[0] = new int[10];
matrix[1] = new int[50]
Mảng hai chiều

Hàng thứ 0 là một mảng 10các phần tử
Hàng đầu tiên là một mảng 50các phần tử

"Chúng tôi vừa tạo ra một mảng được gọi là "răng cưa" . Các cạnh của nó gồ ghề và không đều.

"Và nếu bây giờ chúng ta muốn hiển thị tất cả các phần tử của mảng này trên màn hình, thì lengthmảng của mảng sẽ rất hữu ích: xét cho cùng, độ dài của các hàng của mảng là khác nhau.

"Nhân tiện, bạn có thể cho tôi biết cách tìm chiều dài của 'vùng chứa các thùng chứa' trong ví dụ của chúng ta không? Nó cũng là một đối tượng mảng, có nghĩa là nó có chiều dài."

"Có lẽ matrix.length?"

"Hoàn toàn đúng! Và đối với các mảng tạo thành các hàng, chúng tôi sẽ sử dụng matrix[0].lengthcho hàng thứ 0."

"Và lần đầu tiên, điều đó có nghĩa là chúng ta sẽ sử dụng matrix[1].length?"

"Hoàn toàn đúng. Trong trường hợp đầu tiên, việc thực hiện lệnh sẽ mang lại 10, và trong trường hợp thứ hai, kết quả sẽ là 50.

Làm việc với mảng hai chiều

"Bây giờ hãy thử hiển thị một mảng hai chiều:

int[][] matrix = new int[3][];
matrix[0] = {1, 2, 3, 4, 5, 6};
matrix[1] = {1, 2, 3};
matrix[2] = {1};
for (int i = 0; i < matrix.length; i++)
{
   for (int j = 0; j < matrix[i].length; j++)
      System.out.print( matrix[i][j] + " " );
   System.out.println();
}
Tạo một mảng
Điền vào mảng các giá trị


Vòng lặp bên ngoài lặp qua các hàng của mảng.
Vòng lặp bên trong lặp qua các ô của một hàng.

"Như bạn có thể thấy, chúng tôi cần hai vòng lặp lồng nhau. Vòng đầu tiên chúng tôi gọi là bên ngoài và vòng thứ hai - bên trong .

"Trong vòng lặp bên ngoài ( ibiến), chúng ta tuần tự đi qua tất cả các hàng (mảng) tạo nên mảng hai chiều của chúng ta. Mỗi giá trị của itương ứng với một hàng có chỉ số đó.

"Trong vòng lặp bên trong ( jbiến), chúng tôi lặp lại tất cả các ô trong các hàng. Nhờ vòng lặp bên trong, một hàng bao gồm các giá trị của một mảng một chiều sẽ được hiển thị trên màn hình.

"Đây là những gì sẽ được hiển thị:

Một dòng của mảng được xử lý 1 2 3 4 5 6
Hai dòng của mảng được xử lý 1 2 3 4 5 6
1 2 3
Ba dòng của mảng được xử lý 1 2 3 4 5 6
1 2 3
1

mảng nhiều chiều

"Anh bạn! Bạn có đoán được rằng nếu có mảng hai chiều, thì cũng có thể có mảng ba chiều không?

"Tôi chỉ nghĩ về điều đó, nhưng cảm thấy xấu hổ khi hỏi.

"Vâng, bạn có thể tạo một mảng ba chiều và nói chung là một mảng có kích thước bất kỳ. Những mảng như vậy được gọi là 'đa chiều'. Để giải trí, chúng ta hãy tạo một mảng đa chiều có 4 chiều.

 int[][][][] matrix = new int[2][3][4][5];

"Có vẻ không khó lắm!"

"Bạn chưa thử tạo thủ công! Đây, hãy thưởng thức điều này:

int[][][][] matrix;
matrix = new int[2][][][];                   // Create a 2-element array of references to references to references
for (int i = 0; i < matrix.length; i++)
{
  matrix[i] = new int[3][][];                // Create a 3-element array of references to references
  for (j = 0; j < matrix[i].length; j++)
  {
    matrix[i][j] = new int[4][];             // Create a 4-element array of references
    for (k = 0; k < matrix[i][j].length; k++)
      matrix[i][j][k] = new int[5];          // Create 5-element arrays of integers
  }
}

"Và đó chỉ là tạo một mảng! Sau đó, bạn cũng cần phải làm việc với nó bằng cách nào đó."

"Tôi rút lại những gì tôi đã nói. Làm việc với họ không dễ dàng như vậy. Nhưng điều đó là có thể."

"Vì có thể, đây là một nhiệm vụ bổ sung. Viết mã hiển thị tất cả các giá trị trong một mảng ba chiều. Bạn biết đủ để làm điều này. Điều quan trọng là phải kiên nhẫn và chu đáo. Hoặc có thể tháo vát (có một chút bí mật kiến thức sẽ giúp bạn giải quyết nhiệm vụ này trong một dòng). Nhưng cho dù bạn giải quyết nó như thế nào, hãy giải quyết nó."

"Cảm ơn, Rishi. Tôi sẽ cố gắng."