Adloun

programmation Java (école d'ingénieur) · Chapitre 11 · Application directe du cours

Une température impossible

Exceptions · niveau 2

Énoncé

Écrire une classe Temperature, stockée en kelvins, dont l'invariant est « la température est positive ou nulle ». On la crée par une méthode statique depuisCelsius(double c), qui lève une exception vérifiée TemperatureInvalideException (à écrire) si la température est sous le zéro absolu ( °C). Convertir , et °C en kelvins en traitant l'erreur.

Corrigé

Le constructeur est privé : la seule façon de créer une température passe par depuisCelsius, qui vérifie l'invariant avant de créer l'objet.


class TemperatureInvalideException extends Exception {
    TemperatureInvalideException(String message) { super(message); }
}

class Temperature {
    private final double kelvin;                 // invariant : kelvin >= 0

    private Temperature(double kelvin) { this.kelvin = kelvin; }

    static Temperature depuisCelsius(double c) throws TemperatureInvalideException {
        double k = c + 273.15;
        if (k < 0)
            throw new TemperatureInvalideException(c + " °C est sous le zéro absolu");
        return new Temperature(k);
    }

    double kelvin() { return kelvin; }
}

double[] celsius = { 20, -300, 100 };
for (double c : celsius) {
    try {
        Temperature t = Temperature.depuisCelsius(c);
        System.out.printf("%.1f °C = %.2f K%n", c, t.kelvin());
    } catch (TemperatureInvalideException e) {
        System.out.println("Refusé : " + e.getMessage());
    }
}

20.0 °C = 293.15 K
Refusé : -300.0 °C est sous le zéro absolu
100.0 °C = 373.15 K

L'erreur sur °C n'empêche pas de traiter °C : le try est à l'intérieur de la boucle.

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →