Chapitre 5 Tableaux Jusqu’ici, nous avons employé les variables pour stocker le

Chapitre 5 Tableaux Jusqu’ici, nous avons employé les variables pour stocker les valeurs individuelles de types primi- tifs : une variable de type int pour stocker un entier, une variable de type boolean pour un booléen, etc. Un tableau est une structure regroupant plusieurs valeurs de même type, chacune étant stockée dans un espace particulier appelé une case du tableau. On peut traiter un tableau comme un tout, ou case par case. Traité comme un tout, on pourra le stocker dans une variable, le passer en paramètre ou le donner en résultat d’un calcul. Chaque case est désignée individuellement via son indice, qui correspond à sa position dans le tableau, et peut être traitée comme variable individuelle : on pourra consulter sa valeur, la modifier, etc. 0 1 2 3 4 5 6 } Indices tab = • } Cases ↓ tab[2] = case d’indice 2 tab[0], tab[1], tab[2], tab[3], . . ., tab[6] } 7 Variables (cases) Les tableaux sont des structures des données présentes dans tous les langages de programmation. 5.1 Spécificités des tableaux Un tableau n’existe pas tant qu’on ne l’a pas créé. Les valeurs des types primitifs de Java (int, double, boolean, char) existent sans qu’il soit nécessaire de les créer. Il n’est pas nécessaire de créer la valeur 17 ou la valeur true. Pour les tableaux, c’est différent : il faut les créer pour qu’ils existent et il y a un opérateur pour le faire : l’opérateur new. Une tableau est une valeur d’un type. Ce type dépend de ce que l’on met dans le tableau. On a ainsi le type des tableaux qui contiennent des nombres entiers ou tableaux d’int, le type des tableaux qui contiennent des caractères char, etc. Pour chaque type qui existe en Java, on peut créer un tableau qui contient plusieurs valeurs de ce type, chacune étant stockée dans une case du tableau. Le type d’un tableau d’entier se note int[], celui d’un tableau de char se note char[]. Plus généra- lement, si un type Java se note T, le type des tableaux contenant une valeur de ce type dans chaque case se note T[]. 1 5.2. DÉCLARATION ET CRÉATION CHAPITRE 5. TABLEAUX Un type tableau, comme int[] par exemple, peut servir à déclarer une variable. int[] var; Il n’y a rien de nouveau ici, c’est une déclaration de variable classique avec le type de la variable, puis son nom. Cette déclaration ne crée pas de tableau. Elle crée un nom que l’on pourra utiliser pour désigner un tableau. Ce nom est associé à un espace dans la mémoire qui pourra contenir un tableau. Un tableau a une taille fixée lors de sa création, c’est le nombre de cases qu’il contient. Un fois créé, le tableau ne peut plus jamais changer de taille : on ne peut ni lui ajouter ni lui enlever de cases. Pour créer un tableau, on utilise new suivi du type des éléments et du nombre de cases entre crochets. var = new int[10]; L’expression new int[10] crée un nouveau tableau de 10 cases, chaque case pouvant contenir un nombre entier, et elle renvoie ce tableau. Le reste de la ligne est une affectation normale qui permet de donner une valeur à la variable var. A partir de ce moment, il est possible d’utiliser chaque case du tableau pour y stocker une valeur. Chaque case se comporte comme une variable de type int. tab[0]=10; tab[1]=tab[0]+1; 5.2 Déclaration et création En Java, avant d’utiliser un tableau, il faut : 1. Déclarer une variable de type tableau (symbole []), en indiquant le type T de ses futures cases ; T [] tab; // tab est declare tableau de T 2. Créer explicitement la structure du tableau en mémoire (opération new), en donnant sa taille et le type T de ses éléments. Cette taille ne pourra plus changer : en Java les tableaux sont de taille fixe. tab = new T[taille]; 3. L’initialisation des cases avec des valeurs par défaut, est réalisée implicitement par l’opération de création. Étudions plus en détail ces étapes. Déclaration L’instruction : T [] tab; déclare une variable tab destinée à contenir un tableau, dont les cases seront de type T. Après décla- ration, la variable tab existe, mais n’est pas encore initialisée à un tableau. 2 NFA031 – CNAM 2017 CHAPITRE 5. TABLEAUX 5.2. DÉCLARATION ET CRÉATION Exemples : int [] tabNum; // tabNum est un tableau avec cases de type int double [] t; // t est un tableau avec cases de type double String [] m; // m est un tableau avec cases de type String tabNum[0] = 5; // provoque une erreur: le tableau n’existe pas Après ces déclarations, les variables tabNum, t et m existent, mais pas encore la suite de cases que chacune d’entre elles pourra désigner. Par exemple, il est impossible de modifier la première case de tabNum (notée tabNum[0]) : elle n’existe pas encore. Le compilateur signale l’erreur : Test.Java:7: variable tabNum might not have been initialized tabNum[0] = 5; ^ Création L’opération de création : new T[n]; réalise la création et l’initialisation d’un tableau de n cases de type T : 1. Allocation en mémoire d’un espace suffisant pour stocker n cases de type T. 2. Initialisation des cases du tableau avec des valeurs par défaut. Les tableaux en Java sont de taille fixe. Une fois le tableau créé, l’espace qui lui est alloué en mémoire ne peut pas changer. Par exemple, il est impossible d’ajouter ou d’enlever des cases d’un tableau. Exemple 1 : Déclaration, puis création du tableau tab avec trois entiers. int [] tab; // Declaration tab = new int[3]; // Creation tab[0] = 7; Après l’instruction de création new, la variable tab est initialisée à un tableau contenant trois entiers. Après l’affectation tab[0] = 7, la structure du tableau en mémoire est : tab − → 7 0 0 Il est possible de réunir la déclaration et la création d’un tableau en une seule instruction. On pourra ainsi déclarer et créer le tableau de l’exemple 1 par : Exemple 2 : Déclaration et création en une seule instruction. int [] tab = new int[3]; NFA031 – CNAM 2017 3 5.2. DÉCLARATION ET CRÉATION CHAPITRE 5. TABLEAUX Initialisation par une liste de valeurs Lorsqu’un tableau est de petite taille, il est possible de l’initialiser en donnant la liste des valeurs de chaque case. On utilise la notation {v0, v1, . . . vn}, où vi est la valeur à donner à la case i du tableau. Nous reprendrons souvent cette notation pour regrouper en une seule instruction la déclaration, la création et l’initialisation d’un tableau. Exemple 3 : Déclaration, création et initialisation d’un tableau en une seule instruction. int [] tab = {1,9,2,4}; Il est alors inutile de réaliser une création explicite via new : elle se fait automatiquement à la taille nécessaire pour stocker le nombre des valeurs données. En mémoire on aura : tab − → 1 9 2 4 Valeurs par défaut à la création Lors de la création, les cases d’un tableau sont initialisées avec des valeurs par défaut : — les cases boolean sont initialisées à false. — les cases numériques sont initialisées à 0. — les cases char sont initialisées au caractère nul ’\0’. — les cases référence 1 sont initialisées à la valeur null (référence nulle). Exemple 4 : Valeurs par défaut dans les cases int [] tb = new int[3]; char [] ch = new char[4]; boolean [] bt = new boolean[3]; L’opération new initialise les cases de ces tableaux par : tb − → 0 0 0 ch − → ’\0’ ’\0’ ’\0’ ’\0’ bt − → false false false Longueur d’un tableau La taille ou longueur d’un tableau est le nombre n des cases qu’il contient. Supposons que tab désigne un tableau de taille n. On peut obtenir sa longueur par la notation tab.length. Les indices du tableau tab sont alors compris entre 0 et tab.length-1. Cette notation sera souvent employée pour fixer la valeur maximale qui peut prendre l’indice d’un tableau (voir exemple 6). 1. Voir le chapitre dédié aux objets. 4 NFA031 – CNAM 2017 CHAPITRE 5. TABLEAUX 5.3. ACCÈS AUX CASES 5.3 Accès aux cases L’accès à une case de tableau permet de traiter cette case comme n’importe quelle variable indivi- duelle : on peut modifier sa valeur dans le tableau, l’utiliser pour un calcul, un affichage, etc. L’accès d’une case se fait via son indice ou position dans le tableau. En Java, la première position a pour indice 0, et la dernière, a l’indice n-1 (taille du tableau moins un). premier indice → 0 i n-1 ←dernier indice (tab.length-1) tab = 2.5 | {z } tab.length=n tab[i] vaut 2.5 L’accès aux cases de tab n’a de sens que pour les indices dans l’intervalle [0,. . ., tab.length-1]. Si i est un indice compris dans cet intervalle : — tab[i] : est un accès à la case de position i dans tab. On peut consulter ou modifier cette valeur dans uploads/s3/ cours-tableaux.pdf

  • 32
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager