Les tableaux
Notions théoriques
Qu'est-ce qu'un tableau ?
Un tableau (array) est une structure qui permet de stocker plusieurs valeurs du même type dans une seule variable. Les éléments sont accessibles par leur indice (index), qui commence à 0.
Déclarer et créer un tableau
Il existe deux façons de créer un tableau :
Avec une taille fixe :
int[] notes = new int[5]; // tableau de 5 entiers, initialisés à 0
Avec des valeurs initiales :
int[] notes = {10, 14, 12, 18, 9};
String[] prenoms = {"Alice", "Bob", "Charlie"};
Accéder aux éléments
int[] notes = {10, 14, 12, 18, 9};
System.out.println(notes[0]); // 10 (premier élément)
System.out.println(notes[4]); // 9 (cinquième et dernier élément)
// Modifier un élément
notes[2] = 15;
Si vous accédez à un indice qui n'existe pas (ex : notes[5] sur un tableau de 5 éléments), Java lève une ArrayIndexOutOfBoundsException. L'indice maximal est toujours longueur - 1.
La propriété length
Pour connaître la taille d'un tableau, utilisez .length (sans parenthèses) :
int[] notes = {10, 14, 12, 18, 9};
System.out.println("Nombre de notes : " + notes.length); // 5
Parcourir un tableau
Avec une boucle for classique :
int[] notes = {10, 14, 12, 18, 9};
for (int i = 0; i < notes.length; i++) {
System.out.println("notes[" + i + "] = " + notes[i]);
}
Avec une boucle for-each :
for (int note : notes) {
System.out.println(note);
}
Tableaux à deux dimensions
Un tableau 2D est un tableau de tableaux. Utile pour représenter une grille ou une matrice :
int[][] grille = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
System.out.println(grille[1][2]); // 6 (ligne 1, colonne 2)
Parcours d'un tableau 2D avec deux boucles imbriquées :
for (int i = 0; i < grille.length; i++) {
for (int j = 0; j < grille[i].length; j++) {
System.out.print(grille[i][j] + " ");
}
System.out.println();
}
La classe Arrays
La classe Arrays (à importer) offre des méthodes utiles :
import java.util.Arrays;
int[] tab = {5, 2, 8, 1, 9};
Arrays.sort(tab); // Trie le tableau (modifie l'original)
System.out.println(Arrays.toString(tab)); // [1, 2, 5, 8, 9] (affichage lisible)
Les tableaux ont une taille fixe définie à la création : on ne peut pas les agrandir ou les réduire. Pour une liste de taille variable, on utilisera ArrayList (séance suivante).
Exemple pratique
import java.util.Arrays;
public class TableauxDemo {
public static void main(String[] args) {
// Tableau de notes
int[] notes = {14, 9, 17, 12, 15, 8, 18};
// Afficher toutes les notes
System.out.println("Notes : " + Arrays.toString(notes));
System.out.println("Nombre de notes : " + notes.length);
// Calculer la moyenne
int somme = 0;
for (int note : notes) {
somme += note;
}
double moyenne = (double) somme / notes.length;
System.out.println("Moyenne : " + moyenne);
// Trouver le maximum
int max = notes[0];
for (int note : notes) {
if (note > max) {
max = note;
}
}
System.out.println("Meilleure note : " + max);
// Trier les notes
Arrays.sort(notes);
System.out.println("Notes triées : " + Arrays.toString(notes));
}
}
(double) somme / notes.length : le cast (double) force la conversion de somme en double pour obtenir une division décimale.
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Vous allez créer un programme qui gère les notes d'une classe et calcule des statistiques.
Étape 1 — Initialiser le tableau de notes
Déclare un tableau de 6 notes entières initialisées avec des valeurs.
Quand les valeurs sont connues à l'avance, préférez int[] tab = {1, 2, 3} à int[] tab = new int[3]; tab[0]=1; .... C'est plus concis et moins sujet aux erreurs d'indice.
Étape 2 — Calculer la somme avec une boucle
Calcule la somme de toutes les notes en utilisant une boucle for-each.
Préférez somme += note; à somme = somme + note;. Les opérateurs composés (+=, -=, *=, /=) sont plus courts et expriment clairement l'intention : "ajouter quelque chose à la variable existante".
Étape 3 — Trier et afficher le tableau
Triez le tableau de notes et affichez-le dans l'ordre croissant.
Arrays.sort() trie le tableau sur place (in-place), ce qui signifie qu'il modifie le tableau original. Si vous avez besoin de conserver l'ordre original, créez d'abord une copie avec Arrays.copyOf(tab, tab.length) avant de trier.