71 lines
2.4 KiB
Java
71 lines
2.4 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 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 est correcte : la structuration et la navigation sont dans 2 classes séparées.
|
||
|
|
La classe MonBrin implémente Iterable au sens où elle peut générer à la demande un objet Iterator.
|
||
|
|
|
||
|
|
NB : Notez que j'implémente Iterable<Base> plutôt que Iterable qui n'était pas tout à fait propre
|
||
|
|
c'est un peu technique et c'est lié aux types génériques.
|
||
|
|
Il y a des détails ici
|
||
|
|
https://stackoverflow.com/questions/20790770/why-cant-i-assign-a-raw-type-to-a-parameterized-type-java?rq=1
|
||
|
|
*/
|
||
|
|
/*
|
||
|
|
public class MonBrin implements Iterable<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");
|
||
|
|
}
|
||
|
|
|
||
|
|
/** Pour naviguer?
|
||
|
|
On implémente l'interface iterator de java.util ici
|
||
|
|
L'avantage c'est que c'est standard et tout le monde comprendra sans trop de mal comment la navigation fonctionne.
|
||
|
|
**//*
|
||
|
|
@Override
|
||
|
|
public Iterator<Base> iterator() {
|
||
|
|
throw new UnsupportedOperationException("cette méthode n'est pas implémentée");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
*/
|
||
|
|
|
||
|
|
public class MonBrin implements Iterable<Base> {
|
||
|
|
private MonMaillon debut;
|
||
|
|
|
||
|
|
// Constructeur pour initialiser le brin avec le premier maillon
|
||
|
|
public MonBrin(MonMaillon p) {
|
||
|
|
this.debut = p;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Retourne le premier maillon du brin
|
||
|
|
public MonMaillon getDebut() {
|
||
|
|
return this.debut;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Fournit un itérateur pour parcourir le brin d'ADN
|
||
|
|
@Override
|
||
|
|
public Iterator<Base> iterator() {
|
||
|
|
return new MonBrinIterator(this.debut); // Navigation déléguée à MonBrinIterator
|
||
|
|
}
|
||
|
|
|
||
|
|
// Méthode toString pour afficher tout le brin d'ADN sous forme de chaîne
|
||
|
|
@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();
|
||
|
|
}
|
||
|
|
}
|