« Bonjour, mon élève le plus intelligent ! »

« Bonjour, Rishi ! »

"Avez-vous envie d'une nouvelle discussion sur les tableaux ? Eh bien, aujourd'hui, nous en avons une pour vous ! Aujourd'hui, je vais vous parler des tableaux irréguliers et multidimensionnels."

"Ça a l'air sanguinaire et effrayant."

"Ne vous inquiétez pas, un vrai programmeur peut toujours gérer un tableau, même s'il montre les dents. Blague à part, l'irrégularité d'un tableau reflète la capacité non seulement à échanger les lignes d'un tableau à deux dimensions, mais aussi à construire un tableau cependant il le faut.

"Supposons que vous souhaitiez que la première ligne d'un tableau à deux dimensions ait une longueur de 10 et que la seconde ait une longueur de 50."

« Peux-tu vraiment faire ça ?

"Absolument ! Tout d'abord, nous créons un 'conteneur de conteneurs' - c'est le premier tableau, qui stockera les références aux tableaux de lignes. Voici comment procéder :

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

"Vous omettez simplement la deuxième dimension et la machine Java crée un conteneur de conteneurs. Voici ce qui sera en mémoire après l'exécution de ce code :

"Et bien, vous savez déjà comment créer des tableaux unidimensionnels 🙂

Voici à quoi ressemblera le code résultant :

// Matrix of important data
int[][] matrix = new int[2][];
matrix[0] = new int[10];
matrix[1] = new int[50]
Tableau à deux dimensions

La ligne zéro est un tableau d' 10éléments
La première ligne est un tableau d' 50éléments

"Nous venons de créer un réseau dit "en escalier" . Ses bords sont rugueux et irréguliers.

"Et si nous voulons maintenant afficher tous les éléments de ce tableau à l'écran, alors le lengthtableau du tableau sera utile : après tout, les longueurs des lignes du tableau sont différentes.

"Au fait, pouvez-vous me dire comment trouver la longueur d'un 'conteneur de conteneurs' dans notre exemple ? C'est aussi un objet tableau, ce qui signifie qu'il a une longueur."

"Probablement matrix.length?"

"Tout à fait ! Et pour les tableaux qui forment les lignes, nous utiliserions matrix[0].lengthpour la ligne zéro."

"Et pour le premier, ça veut dire qu'on utiliserait matrix[1].length?"

"Tout à fait. Dans le premier cas, l'exécution de la commande donnera 10, et dans le second cas, le résultat sera 50.

Travailler avec un tableau à deux dimensions

"Essayons maintenant d'afficher un tableau à deux dimensions :

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();
}
Créer un tableau
Remplir le tableau avec des valeurs


Boucle externe qui itère sur les lignes du tableau.
Boucle interne qui itère sur les cellules d'une seule ligne.

"Comme vous pouvez le voir, nous avons besoin de deux boucles imbriquées. La première que nous appelons externe et la seconde - interne .

"Dans la boucle externe (la ivariable), nous parcourons séquentiellement toutes les lignes (tableaux) qui composent notre tableau à deux dimensions. Chaque valeur de icorrespond à une ligne avec cet index.

"Dans la boucle interne (la jvariable), nous parcourons toutes les cellules des lignes. Grâce à la boucle interne, une ligne, constituée des valeurs d'un tableau unidimensionnel, sera affichée à l'écran.

"Voici ce qui s'affichera :

Une ligne du tableau est traitée 1 2 3 4 5 6
Deux lignes du tableau sont traitées 1 2 3 4 5 6
1 2 3
Trois lignes du tableau sont traitées 1 2 3 4 5 6
1 2 3
1

Tableaux multidimensionnels

"Amigo ! As-tu deviné que s'il y a des tableaux à deux dimensions, alors il peut aussi y en avoir à trois dimensions ?

"Je pensais juste à ça, mais j'étais gêné de demander.

"Oui, vous pouvez créer un tableau tridimensionnel et, en général, un tableau de n'importe quelle dimension. De tels tableaux sont appelés "multidimensionnels". Juste pour le plaisir, créons un tableau multidimensionnel à 4 dimensions.

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

« Cela ne semble pas très difficile !

"Vous n'avez pas encore essayé d'en créer un manuellement ! Ici, régalez-vous de ceci :

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

"Et c'est juste créer un tableau! Ensuite, vous devez également travailler avec lui d'une manière ou d'une autre."

"Je retire ce que j'ai dit. Ce n'est pas si facile de travailler avec eux. Mais c'est possible."

"Puisque c'est possible, voici une tâche bonus. Écrivez du code qui affiche toutes les valeurs dans un tableau à trois dimensions. Vous en savez assez pour le faire. L'essentiel est d'être patient et attentif. Ou peut-être d'être débrouillard (il y a un secret de connaissances qui vous aideront à résoudre cette tâche en une seule ligne). Mais peu importe comment vous le résolvez, résolvez-le."

"Merci, Rishi. Je vais essayer."