samedi 22 mars 2014

10 - Les tableaux

0 commentaires

Un tableau ("array" en anglais) est un objet permettant de rassembler sous un même identificateur des données de même type. Sa déclaration est la suivante : type[] nom = new type[n]; où n est le nombre de données que peut contenir le tableau.
En fait, un tableau est même un objet, c'est-à-dire qu'on y accède via une référence. De ce fait, un tableau déclaré sans être initialisé vaut null.
Voici comment créer un tableau de quatre entiers :
1int[] myArray = new int[4];
Vous pouvez très bien préciser les valeurs que vous voulez mettre dans votre tableau. Voici comment créer un tableau contenant les entiers 102030 et 40 :
1int[] myArray = new int[] {10, 20, 30, 40};
Pour simplifier, écrivez :
1int[] myArray = {10, 20, 30, 40};

nom[i] désigne la donnée noi, où i appartient à l'intervalle [0; n-1]. Si i n'appartient pas à cet intervalle, ce code générera une erreur. Ainsi, dans cet exemple :
  • myArray[0] vaut 10 ;
  • myArray[1] vaut 20 ;
  • myArray[2] vaut 30 ;
  • myArray[3] vaut 40 ;
  • myArray[4] est inaccessible. Eh oui, là nous sommes en dehors du tableau.
Dans le 1er exemple, nous n'avons que créé le tableau, sans affecter de valeur particulière à ses éléments (myArray[0]myArray[1], ...) qui valent donc tous 0 (valeur par défaut d'un entier).

Un tableau à deux dimensions se déclare de la manière suivante : type[,] nom = new type[n, m]; où n est le nombre de lignes et m le nombre de colonnes.
Voici comment déclarer un tableau à deux dimensions contenant des réels :
1double[,] myArray = new double[,]
2{
3    {0.1, 0.5},
4    {1.3, 1.7}
5};
Pour simplifier, écrivez :
1double[,] myArray =
2{
3    {0.1, 0.5},
4    {1.3, 1.7}
5};
nom[i, j] désigne l'élément j de la ligne i du tableau nom. Ainsi, dans cet exemple :
  • myArray[0, 0] vaut 0.1 en notation anglaise (soit 0,1 en notation française) ;
  • myArray[0, 1] vaut 0.5 en notation anglaise (soit 0,5 en notation française) ;
  • myArray[1, 0] vaut 1.3 en notation anglaise (soit 1,3 en notation française) ;
  • myArray[1, 1] vaut 1.7 en notation anglaise (soit 1,7 en notation française) ;
  • myArray[2, 0] est inaccessible. Eh oui, là encore nous sommes en dehors du tableau.

Un tableau de tableaux se déclare de la manière suivante : type[][] nom = new type[n][]; où nest le nombre de lignes.
Allez, je ne vous fais pas plus attendre :
1int[][] myIntArray = new int[2][];
2myIntArray[0] = new int[5];
3myIntArray[0][1] = 42;
  • ligne no1 : On crée un tableau, nommé myIntArray, qui va pouvoir contenir 2 tableaux d'entiers. À ce stade, myIntArray[0] et myIntArray[1] valent null : ils ne référencent pas encore du contenu.
  • ligne no2 : On crée le 1er tableau d'entiers avec 5 colonnes. myIntArray[0]ne vaut plus nullmais contient la référence vers son contenu. myIntArray[0][0] jusqu'à myIntArray[4]valent 0 (valeur par défaut d'un entier).
  • ligne no3 : On affecte la 2e case du 1er tableau avec la valeur 42.
Pour bien que vous compreniez, voici l'arborescence de ce tableau de tableaux :
Arborescence du tableau de tableaux d'entiers
Arborescence du tableau de tableaux.
Vous pouvez aussi créer un tableau à partir de variables représentant des tableaux. Voici un exemple pour créer un tableau de tableaux qui contiennent des chaînes de caractères :
1string[] firstnameArray =
2{
3    "Matt",
4    "Tim",
5    "James"
6};
7
8string[] surnameArray =
9{
10    "Johnson",
11    "Smith"
12};
13
14string[][] myArray =
15{
16    firstnameArray,
17    surnameArray
18};

Chaque élément myArray[i] est une référence de tableau à une dimension. Si vous ne faites que déclarer le tableau, ces références ne sont pas initialisées et elles valent null. C'est le cas dans le code suivant :
1int[][] myArrayOfIntArrays = new int[5][];

Après exécution, myArrayOfIntArrays[0] vaut null (de même pour les autres éléments).
Les tableaux sont utiles mais je ne pense pas que nous nous en servirons beaucoup dans ce cours. Dans la partie II, nous verrons une alternative aux tableaux : les collections.





Leave a Reply