Adloun

programmation Java (école d'ingénieur) · Chapitre 10 · Exercice de TD

Des suites de nombres

Classes abstraites et interfaces · niveau 3 (difficile)

Énoncé

On définit l'interface


interface Suite {
    boolean aSuivant();
    long suivant();
}

qui représente une suite de nombres que l'on parcourt une seule fois.

  • Écrire une méthode static long somme(Suite s).
  • Écrire Intervalle, qui produit les entiers de , et Fibonacci, qui produit les premiers termes
  • Calculer la somme des entiers de à et celle des premiers termes de Fibonacci.

Corrigé


static long somme(Suite s) {             // fonctionne avec TOUTE suite
    long total = 0;
    while (s.aSuivant()) total += s.suivant();
    return total;
}

class Intervalle implements Suite {          // les entiers de [debut, fin)
    private long courant; private final long fin;
    Intervalle(long debut, long fin) { courant = debut; this.fin = fin; }
    public boolean aSuivant() { return courant < fin; }
    public long suivant() { return courant++; }
}

class Fibonacci implements Suite {           // les n premiers termes 0, 1, 1, 2, ...
    private long a = 0, b = 1; private int restants;
    Fibonacci(int n) { restants = n; }
    public boolean aSuivant() { return restants > 0; }
    public long suivant() {
        long r = a; long c = a + b; a = b; b = c; restants--;
        return r;
    }
}

somme(new Intervalle(1, 101)) vaut 5050 () et somme(new Fibonacci(10)) vaut 88, la somme de 0 1 1 2 3 5 8 13 21 34. La méthode somme ne connaît que l'interface : elle fonctionnera avec toute suite écrite plus tard. C'est exactement le principe des itérateurs de la bibliothèque Java (interface Iterator, chapitre 12).

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →