Files

90 lines
2.8 KiB
Java
Raw Permalink Normal View History

2024-11-13 17:25:35 +01:00
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 de liste simplement chaînée contenant pour chaque maillon le nom de la base.
On n'utilise pas java.util et on recode tout.
Cette version a un problème : la structuration et la navigation sont dans la même classe.
*/
/*
public class MonBrin implements Iterator<Base>{
public MonBrin(MonMaillon p){
throw new UnsupportedOperationException("cette méthode n'est pas implémentée");
}
public MonMaillon getDebut(){
throw new UnsupportedOperationException("cette méthode n'est pas implémentée");
}
// rappel : on met @Override pour dire au compilateur qu'on veut surcharger (en particulier c'est le cas quand on implémente une interface)
// ce n'est pas nécessaire dans ce cas mais ça permet d'avoir des messages d'alerte si on se trompe (typo dans le nom de la méthode ...)
// voir https://stackoverflow.com/questions/94361/when-do-you-use-javas-override-annotation-and-why
@Override
public boolean hasNext(){
throw new UnsupportedOperationException("cette méthode n'est pas implémentée");
}
@Override
public Base next() {
throw new UnsupportedOperationException("cette méthode n'est pas implémentée");
throw new NoSuchElementException();
}
}
*/
import java.util.Iterator;
public class MonBrin implements Iterator<Base> {
private MonMaillon debut;
private MonMaillon courant;
// Constructeur qui initialise le brin et la position courante
public MonBrin(MonMaillon p) {
this.debut = p;
this.courant = p; // Initialiser courant pour le parcours
}
public MonMaillon getDebut() {
return this.debut;
}
// Méthode hasNext pour vérifier s'il y a un élément suivant
@Override
public boolean hasNext() {
return courant != null;
}
// Méthode next pour obtenir la base actuelle et avancer
@Override
public Base next() {
if (!hasNext()) {
throw new RuntimeException("No more elements in the brin.");
}
Base baseActuelle = courant.getBase();
courant = courant.getSuiteMaillon(); // Avancer au maillon suivant
return baseActuelle;
}
// Méthode pour réinitialiser le parcours du brin
public void reset() {
this.courant = this.debut;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
MonMaillon temp = this.debut;
while (temp != null) {
sb.append(temp.getBase()).append(" ");
temp = temp.getSuiteMaillon();
}
return sb.toString().trim();
}
}