
|
|
|
|
Les tableauxIci, nous allons voir quelque chose d'important. Ce sont les tableaux. Je vais vous montrer comment trier les valeurs d'un tableau, comment copier les valeurs d'un tableau dans un autre, ... Plus tard vous verrez qu'on peut créer des tableaux d'objet, par exemple, des tableau d'objets de type chaînes de caractères et même les trier.
Sommaire du chapitre :
![]() Les tableaux à une dimensionLes vecteursCe sont des tableaux spéciaux à une seule dimension, ils sont connus sous le nom de vecteurs. Déclaration d'un tableau : Code : int[] iTab; Donc, on indique le type du tableau suivit de sa dimension "[]" puis de son nom. Un tableau est un objet, on devra le créer de la manière suivante : Code : Java iTab = new int[10]; On crée un tableau de 10 éléments en mémoire. Chaque élément est numéroté par un indice qui peut varier de 0 à la taille du tableau -1 puisqu'on commence l'indexation à partir de zéro. Donc, la variable de type tableau contient l'adresse mémoire du première élément du tableau, et pour récupérer le ième élément du tableau, Java ajoute i à l'adresse mémoire du première élément du tableau. Il faut par conséquent connaitre la taille du tableau, pour que java puisse chercher dans la mémoire de votre PC un emplacement ou il y a n adresses vides en mémoire si votre tableau fait n éléments. Donc on a adresse du première élément + déplacement. (C'est ce que l'on appelle l'adresse relative du ième élément dans le tableau. Un schéma de la mémoire sera sans doute plus claire. ![]() On a donc 500 qui est l'adresse du tableau, mais aussi l'adresse du première élément dans le tableau! Ind correspond à l'indice c'est à dire la valeur qu'il faut ajouté à l'adresse du première élément pour obtenir le ième élément, et c'est avec cette valeur que l'on va travailler. Cette valeur (Ind sur le dessin) doit être de type int et elle doit être entière et positive! Les variables ou objets sont donc ainsi indexés. Comment initialiser un tableau. On peut le faire de 2 façons : on l'initialise élément par élément. Code : Java iTab[0]=1; iTAb[1]=2; etc... C'est assez lourd à écrire, alors on peut simplifier en écrivant : Code : Java iTab = {1, 2, 3, 4}; Rmq : tout les éléments non initialisés valent zéro. Ne pas vous mettre en tête que les valeurs dans le tableau sont initialisées automatiquement lors de sa création! En effet, si vous créer un tableau d'objets, ceux-ci seront automatiquement initialisés à null (ce qui veut dire rien). Il n'y aura aucune valeur pour ces objets dans la mémoire centrale, et si vous voulez les utiliser, vous aurez un message d'erreur lors de l'exécution vous disant que ces objets sont null! Bah oui puisqu'ils sont crées mais qu'ils ne contiennent rien. On peut aussi initialiser les tableaux à l'aide d'une boucle. Code : Java for (int i = 0; i < iTab.length; i++) { //iTab.length = la taille du tableau. On peut créer ainsi tout type de tableaux : Individu[] candidats = new Individu[10]; On peut aussi regrouper déclaration, création et initialisation : La taille du tableau sera alors égale au nombre d'éléments initialisés dans le tableau. Code : Java char[] tChar = new char[]{'A','B','C'}; Les tableaux multidimentionnelsLe java a une manière particulière de créer des tableaux multi-dimensionnels. On peut déclarer des tableaux de n'importe quel type, mais aussi des tableaux de type tableau! :D. Un petit schéma : ![]() On voit donc là que avec le crochet mauve, j'accède à l'élément dont l'indice vaut 1 de la première dimension du tableau. Et ensuite, vous voyez j'ai mit la même couleur (rouge) pour le sous tableau et la case du tableau dans lequel se sont tableau à été créé, bah vous prenez l'élément de l'indice 1 du tableau rouge du dessous qui est indiqué par le crochet vert. Les crochets permettent donc d'accéder à une dimension d'un tableau. Si on met une valeur entre les crochets, ça accède à l'élément n°i du tableau. (ou du sous tableau) Il faut donc jouer avec les crochets. Les matricesCe sont des tableaux à deux dimensions. Exemple de tableaux à deux dimensions connus sous le nom de matrices : Code : Java int iTab2 [][] = new int [3][]; La déclaration d'un tableaux à deux dimensions est donc : Code : Java int [][] iTab2; La création : Code : Java iTab2 = new int [3][5]; Initialisation ou affectation : Encore de 2 manières, soit avec deux boucles for imbriquées l'une dans l'autre, ou alors comme ceci : Code : Java int [][] iTab = {{1, 2, 3, 4},{5, 6, 7, 10},{11, 22}}; Il y a non plus un seul indice, mais 2 indices pour caractériser un élément d'un tableau : le numéro de sa ligne et celui de sa colonne. Par exemple, pour récupérer l'élément ligne 1 colonne 2 on devra écrire : int element = iTab[1][2]; On peut bien sûr récupérer la longueur de ces tableaux; c'est le nombre de lignes ou de colonnes qu'ils possèdent. Code : Java int nbLignes = iTab.length; //Nombres de lignes. (=Taille du premier tableau) On peut aussi initialiser un tel type de tableau avec deux boucles. Tableau à n dimension = n boucles. (imbriquées) Exemple : Code : Java for (int i = 0; i < 5; i++) { La différence là est que les sous tableaux donc dans la deuxième dimension n'auront plus la même taille. Donc les tableaux ne seront plus carrés mais triangulaire. (Ceci est utile si vous devez faire par exemple un triangle de Pascal et évite de gaspiller de la mémoire) On peut aussi créer des tableaux triangulaire de cette manière : Code : Java int iTab = new int[5][]; //Création de la première dimension. (Tableau principal) On peut bien sur créer des tableaux à 3 dimensions (matrices spatiales), 4 dimensions, etc... Mais ceci est tout de suite plus compliqué et donc pas conseillé d'utiliser. On se limitera à des tableaux de maximum 3 dimensions, lorsque l'on verra la 3D. On peut bien sur regrouper initialisation et déclaration d'un tableau en une seule instruction comme ceci : Code : Java int [] = new int[10]; On peut aussi regrouper déclaration, création et initialisation comme ceci : Code : Java Etudiant etudiants[] = new etudiants[]{etudiant1, etudiant2}; Les limites d'un tableau.La taille d'un tableau ne peut pas être modifiée tout au long d'un programme, une fois qu'elle est fixée, c'est tout! (On ne peut plus la changer!) Cependant il est possible d'utiliser la même variable pour créer un autre tableau. Code : Java int monTableau = new int [6]; Dans ce cas les valeurs du tableaux initial (de taille 6) seront perdues. La solution sera donc de copier les valeurs du tableau initial dans un autre. Opérations basiques sur les tableaux.La copie d'un tableau dans un autre se fait à l'aide de la méthode arraycopy de la classe System. Utilisation de la méthode arraycopy :Cette méthode possède 5 arguments : le nom du tableau original, le numéro de la ligne du tableau original où l'on souhaite débuter la copie, le nom du tableau cible, le numéro de la première ligne du tableau cible ou l'on veut commencer à copier, et la longueur du tableau original. Il faut donc commencer par créer 2 tableaux : Code : Java int [] iTabOrigine = new int [5]; Maintenant on veut faire la copie des éléments 2 3 et 4 dans notre tableau cible. Comment faire ? Il suffit d'écrire : Code : Java System.arraycopy (iTabOrigine, 2, iTabCible, 1, iTabOrigine.length); Cela va nous donner comme valeurs dans le tableau cible : {0,2,3,4,0}; On commence à copier les éléments du tableau original à partir de la ligne n°2 de celui-ci, et on veut copier ces valeurs à partir de la ligne n°1 dans le tableau cible, c'est pour cela qu'on a un zéro comme première valeur dans le tableau cible. Donc, on a le la ligne n°2 du tableau origine, copiée dans la ligne n°1 du tableau cible. Ensuite la ligne n°3 du tableau origine, copiée à la ligne n°2 du tableau cible et ainsi de suite jusqu'à ce que on arrive à la dernière ligne du tableau original. Attention que le tableau cible doit avoir une taille assez grande pour pouvoir contenir les éléments du tableau origine que vous copier. Rappel : N'oublier jamais que l'index du premier élément d'un tableau est 0, que ce soit pour des tableaux de 1, 2 ou n dimensions. Bien sûr, on peut ne rien mettre dans la ligne n°0 du tableau et mettre la première valeur dans la ligne n°1 du tableau, par facilité, mais vous aurez alors un élément en mémoire centrale qui ne servira à rien. Mais en Java je vous conseille de commencer à l'indice zéro quand même car toutes les classes préexistantes suivent ce principe. Si vous faîtes des tableaux d'objets, seul les références en mémoire de ces objets sont copiées, les objets eux même sont identiques, ce sont des clônes. Le tri d'une tableauPour cela il y a une méthode qui s'appelle sort et qui peut trier des nombres par ordre croissant. Il faut utiliser pour cela la classe Arrays, qui est une classe statique qui ne crée par d'objets. Cette classe permet juste de faire des recherches et tri dans un tableau. Il faut l'importer, elle se trouve dans java.util Code : Java int[] tableau = new int[]{5, 7, 6, 10, 1}; Pour savoir si un tableau ne contient déja pas un nombre, on utilise la méthode binarySearch et elle renvoie -1 si le nombre n'est pas dans le tableau sinon elle renvoie l'indice de l'élément : Code : Java int[] tableau = new int[]{5, 7, 6, 10, 1}; Plus tard je vous montrerez comment on peut trier n'importe quel tableau d'objets, et de définir le critère de comparaison. en effet les objets sont un peu plus complexe à trier, car un objet peut être n'importe quoi et Java ne sais pas comment les trier si on en lui dis pas. Exercices1) Créer un programme Java capable de générer deux tableaux d'entiers aléatoirement, la taille de ses deux tableaux étant demandé à l'utilisateur. Les nombres générés aléatoirement dans ces deux tableau devront être comprit entre 0 et 100, et trier. Ensuite fusionner ces deux tableaux pour en former un troisième, qui sera lui aussi trier. 2) Crée un tableau à deux dimension avec nom qui pourra par exemple stocker les noms des membres qui sont inscrit sur jeux-libres.com et pseudo qui stockera les pseudos. Le nom et le pseudo seront à faire encoder par l'utilisateur, il faudra dire combien il y a de membres à encoder, et il faudra faire gaffe que le tableau ne peut que stocker 100 membres, donc il faudra mentionner à l'utilisateur si le tableau est plein et arrêter le programme. 3)Sur bas de l'exercice deux, après que l'utilisateur ai rentrer le nom de tout les membre, demander lui si il veut en rechercher un, et si oui, faîtes une recherche mais l'utilisateur aura la possibilité de soit le rechercher sur base de son nom, ou alors, de son pseudo! Solution de l'exercice sur les tableaux.Code : Java import java.util.Scanner; Solution des exercices 2 et 3. Code : Java import java.util.Scanner; Il existe donc des tableaux à 1, 2, ou n dimensions. Ceux ci sont en fait des variables indexées. Chaque valeur de cette variable indexée est référencée par un numéro qui peut varier de 0 jusqu'à la taille du tableau - 1. Attention, jamais de valeur négative, et de nombre à virgules pour désigner l'élément d'un tableau. Attention à cela car si votre tableau fait 5 lignes , si vous lui demander d'afficher la valeur n°6 du tableau, il vous mettra une erreur lors en exécution, car vous dépasser la capacité de votre tableau. ![]() Rédigé par Lo
|
||
|
Hébergeur du site : 1and1.fr Site de création de Jeux Vidéo Apprenez à créer vos propres Jeux Video A propos de la construction du site... |
515477 pages ont été consultées sur le site ! Dont 337 pages pendant les 24 dernières heures. Page générée en 0.676 secondes Nos partenaires - Otium Production : Aide aux débutants à créer leurs jeux - Site de dessins d'enfants |