56 lines
1.6 KiB
Java
56 lines
1.6 KiB
Java
import java.util.Iterator;
|
|
import java.util.NoSuchElementException;
|
|
|
|
/**
|
|
MonBrin code un brin d'ADN sous forme de liste simplement chaînée.
|
|
|
|
Plusieurs instances de MonMaillon reliées convenablement forment une structure
|
|
simplement chaînée contenant pour chaque maillon le nom de la base.
|
|
|
|
On n'utilise pas java.util (pas de ArrayList, etc.) et on recode tout.
|
|
|
|
Dans cet exercice, cette classe implémente aussi Iterator<Base> :
|
|
elle sait donc se parcourir elle-même.
|
|
*/
|
|
public class MonBrin implements Iterator<Base> {
|
|
|
|
// Premier maillon du brin
|
|
private MonMaillon debut;
|
|
|
|
// Maillon courant pour la navigation (iterator)
|
|
private MonMaillon courant;
|
|
|
|
// Le constructeur fabrique un brin à partir du premier maillon p;
|
|
public MonBrin(MonMaillon p){
|
|
this.debut = p;
|
|
this.courant = p; // l'itération commence au début du brin
|
|
}
|
|
|
|
public MonMaillon getDebut(){
|
|
return this.debut;
|
|
}
|
|
|
|
/** Méthodes de l'interface Iterator<Base> */
|
|
|
|
@Override
|
|
public boolean hasNext() {
|
|
return this.courant != null;
|
|
}
|
|
|
|
@Override
|
|
public Base next() {
|
|
if (this.courant == null) {
|
|
throw new NoSuchElementException("Plus de base dans ce brin");
|
|
}
|
|
Base valeur = this.courant.getBase();
|
|
this.courant = this.courant.getSuiteMaillon();
|
|
return valeur;
|
|
}
|
|
|
|
@Override
|
|
public void remove() {
|
|
// On ne gère pas la suppression dans ce TP
|
|
throw new UnsupportedOperationException("remove() n'est pas supporté");
|
|
}
|
|
}
|