Les Tableaux
Thomas Rey
Lycée Marlioz
6 décembre 2016
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Sommaire
1 Les tableaux : une nécessité
2 Déclaration d’un tableau en Processing
3 Accès aux éléments d’un tableau
4 Tableaux bidimensionnels
5 Avec des objets
6 Fichiers de données
Thomas Rey Les Tableaux
Un premier exemple
Observer le morceau de programme suivant :
n o m 1 = J O p t i o n P a n e.s h o w I n p u t D i a l o g(null,"Nom de l ’ é l è v e 1 ",
"Nom", J O p t i o n P a n e.P L A I N _ M E S S A G E) ;
n o m 2 = J O p t i o n P a n e.s h o w I n p u t D i a l o g(null,"Nom de l ’ é l è v e 2 ",
"Nom", J O p t i o n P a n e.P L A I N _ M E S S A G E) ;
n o m 3 = J O p t i o n P a n e.s h o w I n p u t D i a l o g(null,"Nom de l ’ é l è v e 3 ",
"Nom", J O p t i o n P a n e.P L A I N _ M E S S A G E) ; ...
Il serait peut-être intéressant de créer une boucle pour saisir les 13 élèves de spé ISN, oui, mais. . .
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Un premier exemple (suite)
dans une bouclefor(int i=0, ...), l’indicei ne peut pas servir à définir un nom de variable ;
par exemple, nom_i est uneunique variable quelque soit la valeur de i.
Thomas Rey Les Tableaux
Un premier exemple (suite)
dans une bouclefor(int i=0, ...), l’indicei ne peut pas servir à définir un nom de variable ;
par exemple, nom_i est uneunique variable quelque soit la valeur de i.
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Notion de tableau
Pour créer une variable «indicée» on utilise un nouveau type :le tableau.
Un tableau est une sorte de suite (comme en mathématiques) sauf :
qu’il peut contenir autre chose que des nombres (du texte, des booléens, des caractères, des objets . . .) ; qu’il contient un nombrefini d’éléments.
Thomas Rey Les Tableaux
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Notion de tableau
Pour créer une variable «indicée» on utilise un nouveau type :le tableau.
Un tableau est une sorte de suite (comme en mathématiques) sauf :
qu’il peut contenir autre chose que des nombres (du texte, des booléens, des caractères, des objets . . .) ;
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Notion de tableau
Pour créer une variable «indicée» on utilise un nouveau type :le tableau.
Un tableau est une sorte de suite (comme en mathématiques) sauf :
qu’il peut contenir autre chose que des nombres (du texte, des booléens, des caractères, des objets . . .) ; qu’il contient un nombrefini d’éléments.
Thomas Rey Les Tableaux
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Une définition
Untableau est une collection de données ordonnées telle que :
le nombren de données est fixé (et défini au moment de la création du tableau) ;
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Une définition
Untableau est une collection de données ordonnées telle que :
le nombren de données est fixé (et défini au moment de la création du tableau) ;
les données sont repérées par un rang (ou indice) entier compris entre 0 et n−1.
Thomas Rey Les Tableaux
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Compléments
Il existe aussi des tableauxdynamiques qu’on peut
« agrandir » ou « rétrécir » au cours de l’exécution du programme.
Nous n’en parlerons pas ici, sauf à dire leur nom :
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Compléments
Il existe aussi des tableauxdynamiques qu’on peut
« agrandir » ou « rétrécir » au cours de l’exécution du programme.
Nous n’en parlerons pas ici, sauf à dire leur nom : lesArrayList
Libre à vous de vous documenter sur le sujet.
Thomas Rey Les Tableaux
Sommaire
1 Les tableaux : une nécessité
2 Déclaration d’un tableau en Processing
3 Accès aux éléments d’un tableau
4 Tableaux bidimensionnels
5 Avec des objets
6 Fichiers de données
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Déclaration en Processing
Pour déclarer un tableau de 4 entiers de typeint, deux étapes :
on déclare la variable : int[] m o n t a b l e a u;
on alloue l’espace nécessaire :
m o n t a b l e a u = new int[4]; // OU BIEN : m o n t a b l e a u = {2 ,4 ,8 ,3};
Thomas Rey Les Tableaux
Déclaration en Processing
Pour déclarer un tableau de 4 entiers de typeint, deux étapes :
on déclare la variable : int[] m o n t a b l e a u;
on alloue l’espace nécessaire :
m o n t a b l e a u = new int[4]; // OU BIEN : m o n t a b l e a u = {2 ,4 ,8 ,3};
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Déclaration en Processing (suite)
On peut aussi réaliser les deux opérations en une étape : int[] m o n t a b l e a u = new int[4];// OU BIEN int[] m o n t a b l e a u = {2 ,4 ,8 ,3};
Dans le premier cas, chaque élément du tableau est initialisé à la valeur 0.
Dans le deuxième cas, on a affecté une valeur à chaque élément du tableau.
Thomas Rey Les Tableaux
Déclaration en Processing (suite)
On peut aussi réaliser les deux opérations en une étape : int[] m o n t a b l e a u = new int[4];// OU BIEN int[] m o n t a b l e a u = {2 ,4 ,8 ,3};
Dans le premier cas, chaque élément du tableau est initialisé à la valeur 0.
Dans le deuxième cas, on a affecté une valeur à chaque élément du tableau.
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Résumé
Une déclaration de tableau dont on ne connait pas le contenu au départ se fait ainsi :
T y p e E l e m e n t n o m d u t a b[] = new T y p e E l e m e n t[n];
// T y p e E l e m e n t à c h o i s i r p a r m i int , double , String , ...
ou ainsi :
T y p e E l e m e n t[] n o m d u t a b;
n o m d u t a b = new T y p e E l e m e n t[n];
Thomas Rey Les Tableaux
Résumé
Une déclaration de tableau dont on ne connait pas le contenu au départ se fait ainsi :
T y p e E l e m e n t n o m d u t a b[] = new T y p e E l e m e n t[n];
// T y p e E l e m e n t à c h o i s i r p a r m i int , double , String , ...
ou ainsi :
T y p e E l e m e n t[] n o m d u t a b;
n o m d u t a b = new T y p e E l e m e n t[n];
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Sommaire
1 Les tableaux : une nécessité
2 Déclaration d’un tableau en Processing
3 Accès aux éléments d’un tableau
4 Tableaux bidimensionnels
5 Avec des objets
6 Fichiers de données
Thomas Rey Les Tableaux
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Écrire et lire dans un tableau
En maths, pour indiquer que le 5e terme d’un suite vaut 10 on écritu4 =10, en Java si on veut affecter la valeur 10 au 5e élément d’un tableau montab, on écrit :
montab[4] = 10;
for(int i = 0; i < 10; ++i) { m o n t a b[i] = 2*i;
}
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Écrire et lire dans un tableau
En maths, pour indiquer que le 5e terme d’un suite vaut 10 on écritu4 =10, en Java si on veut affecter la valeur 10 au 5e élément d’un tableau montab, on écrit :
montab[4] = 10;
Exemple :que fait ce « bout » de code ? int m o n t a b[] = new int[ 1 0 ] ; for(int i = 0; i < 10; ++i) {
m o n t a b[i] = 2*i; }
Thomas Rey Les Tableaux
Réponse
On vérifie avec ce code :
for(int i = 0; i < 10; ++i) { p r i n t(m o n t a b[i] + " ; ") ; }
qui affiche :
0; 2; 4; 6; 8; 10; 12; 14; 16; 18;
Autre méthode d’affichage des éléments d’un tableau :
for (int val : m o n t a b) {// on b o u c l e sur tous les é l é m e n t s du t a b l e a u
p r i n t(val+" ; ") ;
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Longueur
Pour retrouver la taille d’un tableau (par exemple dans une fonction ou une procédure) :
int longueur = montableau.length;
Exemple :que fait cette procédure ? void q u e f a i s j e(int[] t a b l e) {
for(int i = 0; i < t a b l e.l e n g t h; i++) { p r i n t(t a b l e[i]+" ; ") ;
}
p r i n t l n() ; }
Thomas Rey Les Tableaux
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Attention !
On donne le code suivant : int[] tab = new int[3];
tab[0] = 0; tab[1] = 1; tab[2] = 2;
int[] t a b B i s = {0 ,1 ,2};
if (tab == t a b B i s) {
p r i n t l n("Même t a b l e a u ") ; } else {
p r i n t l n(" T a b l e a u x d i f f é r e n t s ") ; }
Devinette : que va-t-il afficher ?
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Attention !
On donne le code suivant : int[] tab = new int[3];
tab[0] = 0; tab[1] = 1; tab[2] = 2;
int[] t a b B i s = {0 ,1 ,2};
if (tab == t a b B i s) {
p r i n t l n("Même t a b l e a u ") ; } else {
p r i n t l n(" T a b l e a u x d i f f é r e n t s ") ; }
Devinette : que va-t-il afficher ? Tableaux différents
Thomas Rey Les Tableaux
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Explication
le codeint[tab] crée une variable tab qui contient une adressede la mémoire où seront stockés les éléments du tableau ;
le codeint[] tabBiscrée une autre variable qui contient uneautre adresse en mémoire.
[I@1f01b29; [I@3a8721bd
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Explication
le codeint[tab] crée une variable tab qui contient une adressede la mémoire où seront stockés les éléments du tableau ;
le codeint[] tabBiscrée une autre variable qui contient uneautre adresse en mémoire.
On peut s’en convaincre en écrivant :
System.out.println(tab + "; "+ tabBis); qui donne un affichage du type :
[I@1f01b29; [I@3a8721bd
Thomas Rey Les Tableaux
Explication (suite)
Donc les tableaux ont les mêmes contenus mais sont stockés dans des adressesdifférentes.
La ligneif (tab == tabBis) teste lesadresses et non pas les contenus.
En définissant le tableautabBis par : int[] tabBis = tab;
les deux tableaux auraient lamême adresse et le test serait positif.
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Remarque
On avait rencontré exactement le même type de problème pour comparer les variables de type String:
le typeString est un type évolué;
il se comporte comme un tableau de char;
la condition (maChaine1 == maChaine2) teste si les deux ont la mêmeadresse;
la condition (maChaine1.equals(maChaine2)) teste si les deux chaines ont le mêmecontenu.
Thomas Rey Les Tableaux
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Remarque
On avait rencontré exactement le même type de problème pour comparer les variables de type String:
le typeString est un type évolué;
il se comporte comme un tableau de char;
la condition (maChaine1.equals(maChaine2)) teste si les deux chaines ont le mêmecontenu.
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Remarque
On avait rencontré exactement le même type de problème pour comparer les variables de type String:
le typeString est un type évolué;
il se comporte comme un tableau de char;
la condition (maChaine1 == maChaine2) teste si les deux ont la mêmeadresse;
la condition (maChaine1.equals(maChaine2)) teste si les deux chaines ont le mêmecontenu.
Thomas Rey Les Tableaux
Remarque
On avait rencontré exactement le même type de problème pour comparer les variables de type String:
le typeString est un type évolué;
il se comporte comme un tableau de char;
la condition (maChaine1 == maChaine2) teste si les deux ont la mêmeadresse;
la condition (maChaine1.equals(maChaine2)) teste si les deux chaines ont le mêmecontenu.
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Sommaire
1 Les tableaux : une nécessité
2 Déclaration d’un tableau en Processing
3 Accès aux éléments d’un tableau
4 Tableaux bidimensionnels
5 Avec des objets
6 Fichiers de données
Thomas Rey Les Tableaux
Un exemple
Comment stocker dans une seule variable les informations numériques suivantes ?
0 1 2 3
1 2 3 4
2 3 4 5
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Un exemple (suite)
On va créer un tableau à deux indices (un peu à la manière des coordonnées de points dans un repère) :
int t a b a d d[][] = new int[ 4 ] [ 3 ] ; for(int y=0; y<3; y++) {
for(int x=0; x<4; x++) { t a b a d d[x][y]=x+y; }
}
Thomas Rey Les Tableaux
Sommaire
1 Les tableaux : une nécessité
2 Déclaration d’un tableau en Processing
3 Accès aux éléments d’un tableau
4 Tableaux bidimensionnels
5 Avec des objets
6 Fichiers de données
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
On définit un tableau de six joueurs :
J o u e u r [] j o u e u r s = new J o u e u r[6];// le t a b l e a u des j o u e u r s
On affiche le nom du premier joueur : p r i n t l n(j o u e u r s[0].nom) ;
On crédite son compte de 50e : j o u e u r s[0].g a g n e(50) ;
Thomas Rey Les Tableaux
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
On définit un tableau de six joueurs :
J o u e u r [] j o u e u r s = new J o u e u r[6];// le t a b l e a u des j o u e u r s
On affiche le nom du premier joueur : p r i n t l n(j o u e u r s[0].nom) ;
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
On définit un tableau de six joueurs :
J o u e u r [] j o u e u r s = new J o u e u r[6];// le t a b l e a u des j o u e u r s
On affiche le nom du premier joueur : p r i n t l n(j o u e u r s[0].nom) ;
On crédite son compte de 50e : j o u e u r s[0].g a g n e(50) ;
Thomas Rey Les Tableaux
Sommaire
1 Les tableaux : une nécessité
2 Déclaration d’un tableau en Processing
3 Accès aux éléments d’un tableau
4 Tableaux bidimensionnels
5 Avec des objets
6 Fichiers de données
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Où sont les données ?
Pour remplir un tableau avec des données, on peut : les saisir dans le programme (peu interactif) ;
les demander à l’utilisateur (fastidieux) ; les lire dans un fichier texte (pratique !).
Thomas Rey Les Tableaux
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Où sont les données ?
Pour remplir un tableau avec des données, on peut : les saisir dans le programme (peu interactif) ; les demander à l’utilisateur (fastidieux) ;
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Où sont les données ?
Pour remplir un tableau avec des données, on peut : les saisir dans le programme (peu interactif) ; les demander à l’utilisateur (fastidieux) ; les lire dans un fichier texte (pratique !).
Thomas Rey Les Tableaux
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Lire dans un fichier connu
On va stocker le fichier dans un tableau de chaînes à définir : S t r i n g[] c o n t e n u F i c h i e r;
Le tableau contient désormais autant d’entrées qu’il y a de lignes dansfichier.txt :
int n b L i g n e s = c o n t e n u F i c h i e r.l e n g t h; for (int l = 1; l<n b L i g n e s; ++l) {
p r i n t l n(c o n t e n u F i c h i e r[l]) ; }
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Lire dans un fichier connu
On va stocker le fichier dans un tableau de chaînes à définir : S t r i n g[] c o n t e n u F i c h i e r;
Sifichier.txt est dans le dossierdata de votre sketch : c o n t e n u F i c h i e r = l o a d S t r i n g s(" f i c h i e r . t x t ") ;
Le tableau contient désormais autant d’entrées qu’il y a de lignes dansfichier.txt :
int n b L i g n e s = c o n t e n u F i c h i e r.l e n g t h; for (int l = 1; l<n b L i g n e s; ++l) {
p r i n t l n(c o n t e n u F i c h i e r[l]) ; }
Thomas Rey Les Tableaux
Lire dans un fichier connu
On va stocker le fichier dans un tableau de chaînes à définir : S t r i n g[] c o n t e n u F i c h i e r;
Sifichier.txt est dans le dossierdata de votre sketch : c o n t e n u F i c h i e r = l o a d S t r i n g s(" f i c h i e r . t x t ") ; Le tableau contient désormais autant d’entrées qu’il y a de lignes dansfichier.txt :
int n b L i g n e s = c o n t e n u F i c h i e r.l e n g t h; for (int l = 1; l<n b L i g n e s; ++l) {
p r i n t l n(c o n t e n u F i c h i e r[l]) ;
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Choisir un fichier
On peut aussi demander à l’utilisateur de sélectionner le fichier dans une boîte de dialogue :
S t r i n g[] c o n t e n u F i c h i e r;
s e l e c t I n p u t(" c h o i s i r l e f i c h i e r t e x t e ", "
c h o i x F a i t ") ;
choixFaitest alors le nom d’une méthode qui sera lancée dès que l’utilisateur a cliqué sur OK.
Thomas Rey Les Tableaux
Boite de dialogue de choix de fichier
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
La méthode choixFait
Cette méthode contient au minimum :
void c h o i x F a i t(File f i c h i e r C h o i s i) { if (f i c h i e r C h o i s i == null) {// pas de
f i c h i e r
p r i n t l n(" E r r e u r : p a s de f i c h i e r ou i l l i s i b l e ") ;
} else {
m o n T e x t e = l o a d S t r i n g s(f i c h i e r C h o i s i. g e t A b s o l u t e F i l e() ) ;
} }
Elle peut évidemment se nommer autrement.
Thomas Rey Les Tableaux
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Écrire dans un fichier
La méthode est comparable à l’écriture dans la console : On crée le fichier :
P r i n t W r i t e r o u t p u t;
o u t p u t.c r e a t e W r i t e r(" r e c o r d s . t x t ") ;
o u t p u t.f l u s h() ; o u t p u t.c l o s e() ;
Les tableaux : une nécessité Déclaration d’un tableau en Processing Accès aux éléments d’un tableau Tableaux bidimensionnels Avec des objets Fichiers de données
Écrire dans un fichier
La méthode est comparable à l’écriture dans la console : On crée le fichier :
P r i n t W r i t e r o u t p u t;
o u t p u t.c r e a t e W r i t e r(" r e c o r d s . t x t ") ; On écrit :output.println("Thomas:10000");
On ferme :
o u t p u t.f l u s h() ; o u t p u t.c l o s e() ;
Thomas Rey Les Tableaux
Écrire dans un fichier
La méthode est comparable à l’écriture dans la console : On crée le fichier :
P r i n t W r i t e r o u t p u t;
o u t p u t.c r e a t e W r i t e r(" r e c o r d s . t x t ") ;
On écrit :output.println("Thomas:10000");
On ferme :
o u t p u t.f l u s h() ; o u t p u t.c l o s e() ;