"Ciao, il mio studente più intelligente!"

"Ciao Rishi!"

"Desideri una nuova discussione sugli array? Bene, oggi ne abbiamo una per te! Oggi ti parlerò degli array frastagliati e multidimensionali."

"Sembra assetato di sangue e spaventoso."

"Non preoccuparti, un vero programmatore può sempre gestire un array, anche quando scopre i denti. Scherzi a parte, la frastagliatezza di un array riflette la capacità non solo di scambiare le righe di un array bidimensionale, ma anche di costruire un array tuttavia deve essere.

"Supponiamo che tu voglia che la prima riga di un array bidimensionale abbia una lunghezza di 10 e la seconda di 50."

"Puoi davvero farlo?"

"Assolutamente! Innanzitutto, creiamo un 'contenitore di contenitori': questo è il primo array, che memorizzerà i riferimenti agli array di righe. Ecco come si fa:

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

"Ometti semplicemente la seconda dimensione e la macchina Java crea un contenitore di contenitori. Questo è ciò che sarà in memoria dopo l'esecuzione di questo codice:

"E, beh, sai già come creare array unidimensionali 🙂

Ecco come apparirà il codice risultante:

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

La riga zero è un array di 10elementi
La prima riga è un array di 50elementi

"Abbiamo appena creato un cosiddetto array "frastagliato" . I suoi bordi sono ruvidi e irregolari.

"E se ora vogliamo visualizzare tutti gli elementi di questo array sullo schermo, allora l' lengtharray dell'array tornerà utile: dopo tutto, le lunghezze delle righe dell'array sono diverse.

"A proposito, puoi dirmi come trovare la lunghezza di un 'contenitore di contenitori' nel nostro esempio? È anche un oggetto array, il che significa che ha una lunghezza."

"Probabilmente matrix.length?"

"Esatto! E per gli array che formano le righe, useremmo matrix[0].lengthper la riga zero."

"E per il primo, ciò significa che useremmo matrix[1].length?"

"Giusto. Nel primo caso, l'esecuzione del comando produrrà 10, e nel secondo caso, il risultato sarà 50.

Lavorare con un array bidimensionale

"Ora proviamo a visualizzare un array bidimensionale:

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();
}
Creare un array
Riempire l'array con valori


Ciclo esterno che itera sulle righe dell'array.
Ciclo interno che itera sulle celle di una singola riga.

"Come puoi vedere, abbiamo bisogno di due cicli nidificati. Il primo lo chiamiamo outer e il secondo inner .

"Nel ciclo esterno (la ivariabile), passiamo in sequenza attraverso tutte le righe (array) che compongono il nostro array bidimensionale. Ogni valore di icorrisponde a una riga con quell'indice.

"Nel ciclo interno (la jvariabile), iteriamo su tutte le celle nelle righe. Grazie al ciclo interno, sullo schermo verrà visualizzata una riga, che consiste dei valori di un array unidimensionale.

"Questo è ciò che verrà visualizzato:

Viene elaborata una riga dell'array 1 2 3 4 5 6
Vengono elaborate due righe dell'array 1 2 3 4 5 6
1 2 3
Vengono elaborate tre righe dell'array 1 2 3 4 5 6
1 2 3
1

Array multidimensionali

"Amigo! Hai indovinato che se ci sono matrici bidimensionali, allora possono essercene anche tridimensionali?

"Ci stavo solo pensando, ma ero imbarazzato a chiedere.

"Sì, puoi creare un array tridimensionale e, in generale, un array di qualsiasi dimensione. Tali array sono chiamati 'multidimensionali'. Solo per divertimento, creiamo un array multidimensionale che abbia 4 dimensioni.

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

"Non mi sembra molto difficile!"

"Non hai ancora provato a crearne uno manualmente! Ecco, rifatti gli occhi con questo:

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

"E questo sta solo creando un array! Quindi devi anche lavorarci in qualche modo."

"Ritiro quello che ho detto. Non è così facile lavorare con loro. Ma è possibile."

"Poiché è possibile, ecco un'attività bonus. Scrivi un codice che mostri tutti i valori in un array tridimensionale. Ne sai abbastanza per farlo. La cosa principale è essere paziente e attento. O forse essere pieno di risorse (c'è una parte segreta di conoscenza che ti aiuterà a risolvere questo compito in una sola riga).Ma non importa come lo risolvi, risolvilo."

"Grazie, Rishi. Ci proverò."