"Halo, muridku yang paling pintar!"

"Halo, Rishi!"

"Apakah Anda merindukan diskusi baru tentang array? Nah, hari ini kami punya satu untuk Anda! Hari ini saya akan memberi tahu Anda tentang array bergerigi dan multidimensi."

"Kedengarannya haus darah dan menakutkan."

"Jangan khawatir, seorang programmer sejati selalu dapat menangani sebuah array, bahkan ketika itu menunjukkan giginya. Selain lelucon, jaggedness sebuah array mencerminkan kemampuan tidak hanya untuk menukar baris array dua dimensi, tetapi juga untuk membangun sebuah array bagaimanapun itu perlu.

"Katakanlah Anda ingin baris pertama dari array dua dimensi memiliki panjang 10, dan yang kedua menjadi 50."

"Bisakah kamu benar-benar melakukan itu?"

"Tentu saja! Pertama, kita membuat 'container of containers' — ini adalah larik pertama, yang akan menyimpan referensi ke larik baris. Begini caranya:

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

"Anda cukup menghilangkan second dimension , dan mesin Java akan membuat wadah berisi wadah. Inilah yang akan ada di memori setelah menjalankan kode ini:

"Dan, Anda sudah tahu cara membuat array satu dimensi 🙂

Seperti inilah tampilan kode yang dihasilkan:

// Matrix of important data
int[][] matrix = new int[2][];
matrix[0] = new int[10];
matrix[1] = new int[50]
Array dua dimensi

Baris ke-nol adalah array 10elemen
Baris pertama adalah array 50elemen

"Kami baru saja membuat apa yang disebut larik "bergerigi" . Ujung-ujungnya kasar dan tidak beraturan.

"Dan jika sekarang kita ingin menampilkan semua elemen dari larik ini di layar, maka larik larik lengthakan berguna: lagipula, panjang baris larik berbeda.

"Ngomong-ngomong, dapatkah Anda memberi tahu saya cara menemukan panjang 'wadah wadah' dalam contoh kita? Ini juga merupakan objek larik, yang artinya memiliki panjang."

"Mungkin matrix.length?"

"Benar sekali! Dan untuk larik yang membentuk baris, kami akan menggunakan matrix[0].lengthbaris ke-nol."

"Dan untuk yang pertama, itu artinya kita akan menggunakan matrix[1].length?"

"Benar sekali. Dalam kasus pertama, eksekusi perintah akan menghasilkan 10, dan dalam kasus kedua, hasilnya adalah 50.

Bekerja dengan array dua dimensi

"Sekarang mari kita coba menampilkan array dua dimensi:

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();
}
Membuat array
Isi array dengan nilai


Outer loop yang beriterasi pada baris array.
Lingkaran dalam yang berulang pada sel-sel dari satu baris.

"Seperti yang Anda lihat, kita membutuhkan dua loop bersarang. Yang pertama kita panggil outer, dan yang kedua — inner .

"Di loop luar ( ivariabel), kita secara berurutan melewati semua baris (array) yang membentuk array dua dimensi kita. Setiap nilai sesuai idengan baris dengan indeks itu.

"Di loop dalam ( jvariabel), kami mengulangi semua sel dalam baris. Berkat loop dalam, sebuah baris, yang terdiri dari nilai array satu dimensi, akan ditampilkan di layar.

"Inilah yang akan ditampilkan:

Satu baris dari array diproses 1 2 3 4 5 6
Dua baris array diproses 1 2 3 4 5 6
1 2 3
Tiga baris array diproses 1 2 3 4 5 6
1 2 3
1

Array multidimensi

"Amigo! Apakah Anda menebak bahwa jika ada array dua dimensi, maka bisa juga ada array tiga dimensi?

"Aku baru saja memikirkannya, tapi malu untuk bertanya.

"Ya, Anda dapat membuat array tiga dimensi, dan secara umum, array dimensi apa pun. Array seperti itu disebut 'multidimensi'. Hanya untuk iseng, mari kita buat array multidimensi yang memiliki 4 dimensi.

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

"Sepertinya tidak terlalu sulit!"

"Kamu belum mencoba membuatnya secara manual! Di sini, nikmati ini:

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
  }
}

"Dan itu hanya membuat sebuah array! Maka Anda juga perlu bekerja dengannya."

"Saya mengambil kembali apa yang saya katakan. Tidak mudah bekerja dengan mereka. Tapi itu mungkin."

"Karena itu mungkin, inilah tugas bonus. Tulis kode yang menampilkan semua nilai dalam array tiga dimensi. Anda cukup tahu untuk melakukan ini. Hal utama adalah bersabar dan penuh perhatian. Atau mungkin banyak akal (ada sedikit rahasia pengetahuan yang akan membantu Anda menyelesaikan tugas ini dalam satu baris). Tapi tidak peduli bagaimana Anda menyelesaikannya, selesaikan."

"Terima kasih, Rishi. Aku akan mencoba."