import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * Classe qui implante une séquence d'entiers positifs ou nuls initialement vide. * Les éléments y sont ajoutés un par un jusqu'à un appel à shift * qui "compresse" ces éléments qui peuvent ensuite être enlevés un * par un, lorsqu'il ne reste plus de valeur dans la série, enlever retourne 0 * * @author Guy Lapalme, Université de Montréal, 2014 * */ public class Serie { private List serie; private boolean shifted; /** * création de la série initialement vide */ Serie(){ serie=new ArrayList(); shifted=false; } public String toString(){ return serie+":"+shifted; } /** * Ajoute un entier i positif ou nul à la série * Lève une IllegalArgumentException si shift a déjà été appelé * Lève une IllegalArgumentException si i est négatif * @param i entier ajouté */ public void ajouter(int i){ if(shifted) throw new IllegalArgumentException("ajouter après shift:"+this); if(i<0) throw new IllegalArgumentException("ajouter("+i+") argument négatif:"+this); serie.add(i); } /** * Enlève l'élément du début de la série et le retourne. * Retourne 0 s'il ne reste plus d'élément dans la série. * Lève une IllegalArgumentException si shift n'a pas été appelé * * @return valeur de l'élément enlevé */ public int enlever(){ if(!shifted) throw new IllegalArgumentException("enlever avant shift:"+this); if(serie.size()==0) return 0; return serie.remove(0); } /** * Compresse une séquence en enlevant d'abord toutes les valeurs égales à 0. * Parcourt ensuite la séquence résultante en comprimant deux valeurs égales. * * @return le total des valeurs comprimées. */ public int shift(){ int pts=0; // enlever tous les 0 for(Iterator it=serie.iterator();it.hasNext();) if(it.next()==0)it.remove(); // éliminer les deux identiques for(int i=1;i