ICS3U

Accueil > Programmer avec Java > Structures de données >

📚 Tableau

Survol et attentes

Définitions
tableau
une structure de données qui stocke une collection d’éléments de même type. En anglais, ça s’appelle un array. En Java, les tableaux sont de taille fixe. Il sont déclarés avec des crochets droits [] après le type de données. P. ex. int[] tableau; pour un tableau d’entiers.
index
un nombre entier qui identifie la position d’un élément dans un tableau. Les index dans Java, comme dans la majorité des langages, commencent à 0. On accède à un élément spécifique d’un tableau avec tableau[index]. Si l’index fourni n’est pas valide (négatif ou >= length), Java génère une erreur ArrayIndexOutOfBoundsException.
length
un attribut d’un tableau qui indique le nombre d’éléments dans le tableau. Pour un tableau tableau, on peut obtenir la longueur avec tableau.length.
Arrays
une classe Java qui fournit des méthodes pour manipuler des tableaux, comme pour les afficher ou les trier sans avoir à développer ces algorithmes nous-mêmes.
traverser
parcourir tous les éléments d’un tableau. Il existe plusieurs façons de le faire en Java, notamment avec une boucle for, une boucle while ou une boucle for-each. C’est une technique de base pour un grand nombre d’algorithmes comme trouver des valeurs, compter des éléments, ou les trier.
variable accumulateur
une variable utilisée pour combiner les valeurs inidividuelles d’un tableau avec une opération quelconque. P. ex. une variable pour la somme de tous les éléments d’un tableau.
variable drapeau
une variable utilisée pour indiquer l’état de quelque chose. Si l’état est juste vrai/faux, on peut utiliser un boolean. Dans d’autre cas, l’état peut être une valeur numérique - comme la position dans un tableau - alors un int peut être plus approprié. Exemple : un drapeau booléen peut indiquer si un élément est trouvé dans un tableau ou non. Dans le même contexte un drapeu numérique peut indiquer l’index de l’élément trouvé ou -1 s’il n’est pas trouvé.

Objectifs d’apprentissage

À la fin de cette leçon vous devrez être en mesure de :

Critères de succès

Structure d’un tableau en mémoire

Crédit : Mustapha Ejjaaouani, 2024

Créer et utiliser des tableaux en Java

Crédit : Hervice Ngouffo, 2024

Traverser un tableau - trois façons différentes

Pour traverser un tableau, on utilise une boucle.

Voir les notes sur les boucles pour vous rafraîchir la mémoire.

Dans les exemples ci-dessous, on traverse une boucle simplement pour afficher chaque valeur du tableau.

Boucle while - lire ou modifier les éléments du tableau

La boucle while peut servir pour n’importe quelle boucle.

1
2
3
4
5
6
7
int[] tableau = {1, 2, 3, 4, 5};

int i = 0;
while (i < tableau.length) {
    System.out.println(tableau[i]);
    i++;
}

Boucle for - lire ou modifier les éléments du tableau

La boucle for est particulièrement bien adaptée pour les tableaux car les trois opérations sur l’index du tableau dans la version while sont regroupées dans la déclaration de la boucle for.

1
2
3
4
5
int[] tableau = {1, 2, 3, 4, 5};

for (int i = 0; i < tableau.length; i++) {
    System.out.println(tableau[i]);
}

Boucle for-each - lire seulement

La boucle for-each est une version spécialisée de la syntaxe for conçu spécifiquement pour traverser les collections, y compris les tableaux.

Dans cette boucle, on n’utilise pas les index du tableau - ils sont gérés automatiquement par Java. Plutôt, on utilise une variable temporaire pour chaque élément du tableau. Cette variable doit être du même type que les éléments du tableau.

1
2
3
4
5
int[] tableau = {1, 2, 3, 4, 5};

for (int element : tableau) {
    System.out.println(element);
}

La ligne for (int element : tableau) se lit comme “pour chaque élément de type int dans le tableau”.

Arrays

La classe Arrays de Java fournit des méthodes pratiques pour manipuler des tableaux.

toString()

Pour afficher les éléments d’un tableau sans écrire un algorithme spécifique, vous pouvez utiliser la commande suivante :

1
Array.toString(tableau);

Comparez la sortie de cette commande avec la commande System.out.println(tableau); pour voir la différence.

sort()

Pour trier un tableau en ordre croissant, vous pouvez utiliser la commande suivante :

1
Arrays.sort(tableau);

Cette méthode modifie directement les éléments de tableau ce qu’on appelle un tri en place. Aucun nouveau tableau est généré.

binarySearch()

Contexte : la recherche linéaire

Pour utiliser une recherche linéaire sur un tableau, on peut simplement le traverser élément-par-élément, comme ceci :

1
2
3
4
5
6
7
8
int recherche = 3;
boolean found = false;
for (int i = 0; i < tableau.length; i++) {
    if (tableau[i] == recherche) {
        found = true;
        break;
    }
}

S’il n’y a jamais d’égalité entre la valeur cherchée et un élément du tableau, found restera false. Sinon, on change found à true et on sort de la boucle.

La plupart des méthodes de recherche retourne un index valide si l’élément est trouvé, ou un index négatif si l’élément n’est pas trouvé. L’algorithme pour ça est identique à l’algorithme précédent, mais on remplace le drapeau booléen avec un drapeau numérique :

1
2
3
4
5
6
7
8
int recherche = 3;
int found = -1;
for (int i = 0; i < tableau.length; i++) {
    if (tableau[i] == recherche) {
        found = i;
        break;
    }
}

Recherche binaire

Par contre, si on a beaucoup d’éléments à chercher, une méthode plus efficace est la recherche binaire. Il y a une précondition, par contre : pour utiliser la recherche binaire, le tableau doit être trié.

Voici comment on peut utiliser la recherche binaire avec Arrays :

1
2
3
int recherche = 3;
Arrays.sort(tableau);
int index = Arrays.binarySearch(tableau, recherche);

Pour plus de détails sur les algorithmes de recherche et l’efficacité algorithmique, voir le cours ICS4U!

Exemple complet - faire la moyenne des éléments d’un tableau

Crédit : Hervice Ngouffo, 2024

Exercices

📚 Tester la compréhension

Quiz de vérification sur les tableaux et leurs index

🛠️ Pratique

Vous rendre sur le site codingbat.com et vous créer un compte avec votre courriel écolecatholique.ca. Ajouter mon courriel dans la section Teacher Share afin de me montrer vos progrès.

  1. Travaillez d’abord 3-4 exercices dans la section “Warmup-1” pour vous familiariser avec le système :
    • la formulation des problèmes
    • les entrées sous forme de paramètres
    • les sorties en tant que valeurs de retour
    • les tests automatisés
    • les exemples de solutions
  2. Faites 3-4 exercices dans la section “Array-1” pour vous familiariser avec la structure des tableaux (index et length).
  3. Faites 3-4 exerices dans la section “Array-2” pour vous familiariser à traverser des tableaux (incluant l’utilisation de continue et break).

La section “Array-3” est plus avancée (matrices / tableaux de tableaux) et peut être considérée comme un défi pour ce cours.