Jeux Libres

Plateforme de création de jeux vidéo (Le site est en cours de création / réorganisation)


» Les Tutoriaux » Les tableaux.

Les tableaux.


Ici, nous allons voir quelque chose d'important. Ce sont les tableaux. Je vais vous montrer comment trier les valeurs d'un tableaux, comment copier les valeurs d'un tableaux 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.




Les tableaux à une dimension.


Partie 1 (suite)



Les vecteurs



Ce sont des tableaux spéciaux à une seule ligne, ils sont connus sous le nom de vecteur.
Déclaration d'un tableau :
Code : Java

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éments est numéroté par un indice qui va de 0 à la taille du tableau -1 puisqu'on commence la numérotation à partir de zéro.
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éments.
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 faîtes 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éer mais qu'ils ne contiennent rien.

On peut aussi les initialiser à partir d'une boucle.
Code : Java

for (int i = 0; i < iTab.length; i++) { //iTab.length = la taille du tableau.
iTab[i] = valeur;
}
 

On peut créer ainsi tout type de tableaux : Individu [] candidats = new Individut [10];

char [] tChar = {'A','B','C'};
etc ...


Les tableaux multidimentionnels.


Le java à une manière particulière de créer des tableaux multi-dimentionnels.

On peut déclarer des tableaux de n'importe quel type, mais aussi des tableaux de type tableau :D.

Les matrices



Ce sont des tableaux à deux dimensions.
Exemple de tableau à deux dimensions connut sous le nom de matrices :
Code : Java

int iTab2 [][] = new int [3][];
iTab2[0] = new int [5]; //Création d'un nouveau tableau dans le tableau iTab2.
iTab2[1] = new int [5]; //....
 

La déclaration est donc :
Code : Java

int [][] iTab2;
 

L'initialisation :
Code : Java

iTab2 = new int [3][5];
 

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.

Pour récupérer l'élément ligne 1 colonne 2 on écrira :
Code : Java

int element = iTab[1][2];
 

On peut bien sur récupérer la longueur de ces tableaux; c'est le nombre de lignes et de colonnes qu'ils possèdent.
Code : Java

int nbLignes = iTab.length; //Nombres de lignes.
int nbColonnes = iTab[].length; //Nombre de colonnes.
 


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++) {
          for (int j = 0; j < 5; j++) {
               iTab[i][j] = élément;
          }
}
 

On peut bien sur créer des tableaux de 3 dimensions (matrices spatiales) 4 dimensions, etc... Mais ceci est tout de suite plus compliqué et donc pas conseillé d'utiliser.
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 initialisation, déclaration et affectation 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 tableaux.

Code : Java

int monTableau = new int [6];
monTableau = new int [10];
 


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.


La copie d'un tableau dans un autre.


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 avoir 2 tableaux :
Code : Java

int [] iTabOrigine = new int [5];
int [] iTabCible = new int [5];

iTabOrigine = {0,1,2,3,4};
 


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);
 

Celà va nous donner comme valeurs dans le tableau cible : {0,2,3,4};

On commence à copié à partir de la ligne n°2 du tableau original, 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. N'oublier jamais que l'indexe du premier élément d'un tableau est 0, que ce soit pour des tableaux de 1, 2 ou n dimensions. Bien sur, 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 de tableaux.


La méthode sort.



Il existe une méthode pariculière pour trier les valeurs d'un tableau dans l'ordre croissant. Elle se trouve dans java.util.Arrays, il faut donc l'importer dans votre classe. Cette méthode à un argument, le tableau à trier.

Exemple :
Code : Java

import java.util.Arrays;
public class exemple () {
      public static void main (String [] args) {
             int [] iTab = {5, 8, 4, 10, 2, 15, 13};
             Arrays.sort (iTab);
             for (int i = 0; i < iTab.length; i++)
                    System.out.print(iTab[i]+", ");
      }
}
 


Maintenant si on le veut dans l'ordre décroissant il suffira de placer les éléments de ce tableau-ci dans un autre, à partir de la dernière valeur de iTab jusqu'à la première.

Je vous laisse essayer ^^.

[information]Il y a d'autre méthodes bien sûr, celle par exemple qui renvoie un entier positif si l'élément est dans le tableau ou négatif si il ne l'est pas. C'est la fameuse méthode binarySearch (Objetct o) de la classe Arrays.[/inforamtion]


Exercices


1) 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;
import java.util.Arrays;
public class exercTableaux3 {
public static void main (String[] args) {
Scanner lecture = new Scanner (System.in);
System.out.println("Entrer la taille du premier tableau : ");
int taille1 = lecture.nextInt ();
System.out.println("Entrer la taille du second tableau : ");
int taille2 = lecture.nextInt ();
int[] iTab1 = new int[taille1];
int[] iTab2 = new int[taille2];
int taille3 = taille1 + taille2;
int[] iTab3 = new int[taille3];
System.out.println("Génération du premier tableau.");
for (int i = 0; i < iTab1.length; i++) {
iTab1<italique> = (int) (Math.random () * 100);
System.out.println(iTab1<italique>);
}
System.out.println("Génération du second tableau.");
for (int i = 0; i < iTab2.length; i++) {
iTab2<italique> = (int) (Math.random () * 100);
System.out.println(iTab2<italique>);
}
Arrays.sort(iTab1);
Arrays.sort (iTab2);
System.arraycopy (iTab1, 0,iTab3 , 0, iTab1.length);
System.arraycopy (iTab2, 0, iTab3, iTab1.length, iTab2.length);
Arrays.sort (iTab3);
System.out.println("Affichage du tableau 3, fusion des deux premiers.");
for (int i = 0; i < iTab3.length; i++) {
System.out.println(iTab3<italique>);
}

}
}


Solution de l'exercice suivant :
Code : Java
import java.util.Scanner;
/**
* Write a description of class Eco23Tableaux here.
*
* @author (your name)
* @version (a version number or a date)
*/

public class Eco23Tableaux{
// instance variables - replace the example below with your own


/**
* Constructor for objects of class Eco23Tableaux
*/

public static void main (String args[]) {
String membres[][] = new String[2][100];
Scanner lectureClavier = new Scanner (System.in);
System.out.println("Entrer le nombres de membres à inscrire.");
int nbMembres = lectureClavier.nextInt ();
lectureClavier.nextLine();
for (int i = 0; i < nbMembres; i++) {
if (i < 100) {
System.out.println("Quel est le nom de membre n°"+(i+1)+" ?");
membres[0]<italique> = lectureClavier.nextLine ();
System.out.println("Quel est le pseudo de membre n°"+(i+1)+" ?");
membres[1]<italique> = lectureClavier.nextLine ();
} else {
System.out.println("Erreur, le tableau est remplit!");
break;
}
}
System.out.println("Voulez vous rechercher un membre ? (tappez oui ou non)");
String reponse = lectureClavier.nextLine ();
if (reponse.equals ("oui")) {
System.out.println("Entrer 1 pour rechercher le nom ou 2 pour rechercher le pseudo du membre.");
int typeRecherche = lectureClavier.nextInt ();
lectureClavier.nextLine ();
if (typeRecherche == 1) {
System.out.println("Tapper le nom du membre à recherher : ");
String nomARech = lectureClavier.nextLine ();
int i = 0;
while (!membres[0]<italique>.equals (nomARech) && i < membres.length)
i++;
if (i >= 100)
System.out.println("Erreur : nom du membre pas trouvé");
else
System.out.println("Nom du membre : "+membres[0]<italique>+" pseudo du membre : "+membres[1]<italique>);
} else {
System.out.println("Tapper le pseudo du membre à rechercher : ");
lectureClavier.nextLine ();
String pseudoARech = lectureClavier.nextLine ();
int i = 0;
while (!membres[1]<italique>.equals (pseudoARech) && i < membres.length)
i++;
if (i >= 100)
System.out.println("Erreur : psuedo du membre pas trouvé");
else
System.out.println("Nom du membre : "+membres<italique>[0]+" "+" pseudo du membre : "+membres[0]<italique>);
}
System.out.println("Programme terminé!");
}
}
}




Il existe donc des tableaux à 1, 2, ou n dimensions. Ceux ci est en fait une variables indexée. Chaque valeurs de cette variable est référencée par un numéro qui peut varier de 0 à n. 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...
352248 pages ont été consultées sur le site !
Dont 244 pages pendant les 24 dernières heures.

Page générée en 0.856 secondes


Nos partenaires
- Otium Production : Aide aux débutants à créer leurs jeux
- Construis ton jeu en PHP : Apprenez à créer votre jeu en PHP
- A.C.S.E.L. : Club de patinage artistique de Caen


  © 2005-2008 www.jeux-libres.com - Toute reproduction totale ou partielle du contenu de ce site est strictement interdite.