Première partie
Objectifs d'apprentissage
- Comprendre le principe d'itérateur.
- Expliquer le concept d’itérateur dans vos propres mots.
- Résoudre des problèmes exigeant l’utilisation d’itérateurs.
Itérateurs
Pour ce laboratoire, vous utiliserez une liste chaînée afin de sauvegarder un nombre illimité de bits : des zéros et des uns. Contrairement aux implémentations vues jusqu’ici, les valeurs à l’intérieur des noeuds sont des entiers (int).
La classe BitList possède une classe interne. Il s'agit en fait d'une seconde définition de classe dont la visibilité est private se trouvant dans le même fichier de définition de la classe public BitList. Cette classe interne (inner en anglais) est BitListIterator.
BitListIterator réalise l'interface Iterator qui oblige l'implémentation de 3 méthodes, soit hasNext, next et add.
Prenez le temps de bien comprendre le comportement de chacune des méthodes et leur implémentation.
BitList
Puisque plusieurs opérations sur les bits nécessitent un traitement de droite à gauche, l’implémentation doit sauvegarder les bits dans l’ordre «droite à gauche», c.-à-d. le bit le plus à droite dans le mot binaire sera en en première position dans la liste (premier noeud).
Par exemple, les bits «11010» doivent être sauvegardés dans une liste telle que le premier noeud contienne 0, le second 1, suivi d’un 0, puis 1, et 1 :
- -> 0 -> 1 -> 0 -> 1 -> 1
1. Complétez l’implémentation de la classe BitList.
public BitList( String s )
Ce constructeur doit créer une liste représentant la chaîne de 0s et 1s donnée en entrée.
La chaîne s doit contenir que des 0s et des 1s sinon il faudra lancer l'exception IllegalArgumentException.
Le constructeur initialise cette nouvelle liste de bits afin de représenter la valeur de la chaîne. Chaque caractère de la chaîne représente un bit de la liste.
Par exemple, étant donné la chaîne «1010111», le constructeur doit initialiser cette liste afin d’y inclure les bits suivants (portez attention à l'ordre des bits encore une fois!).
- -> 1 -> 1 -> 1 -> 0 -> 1 -> 0 -> 1
Si la chaîne est vide, le constructeur doit créer une liste vide — la valeur null n’est pas valide.
Le constructeur ne doit pas retirer les zéros de la partie gauche. Par exemple, étant donné «0001» le constructeur doit initialiser cette liste comme suit.
- -> 1 -> 0 -> 0 -> 0