Java - Exercices - Température

Le but de cet exercice est d'écrire une classe représentant la température. Les trois unités possibles seront "Kelvin", "Celsius" ou "Fahrenheit".
Les méthodes écrites devront toutes être des méthodes d'objet.
  1. Définir une classe Temperature, décrite par un double représentant la température et un String représentant l'unité. Définir un constructeur initialisant un objet Température à zéro Kelvin.
  2. Définir un deuxième constructeur prenant en argument un double et un String et initialisant la température correspondante.
  3. Définir un troisième constructeur prenant en argument une Température et initialisant une copie de celui-ci.
  4. Définir des méthodes permettant d'afficher et de modifier chaque élément d'une Temperature .
  5. Définir une méthode conversionKC convertissant une température donnée en Kelvin en une autre donnée en degrés Celsuis, et ne faisant rien si la température initiale n'était pas en Kelvin. On rappelle la formule TC=TK-273.15.
  6. De même, définir  une méthode conversionCF convertissant une température donnée en degrés Celsius en une autre donnée en degrés Fahrenheit, et ne faisant rien si la température initiale n'était pas en degrés Celsius. ON rappelle la formule TF=9/5*TC+32.
  7. Comment tester l'égalité de deux Températures (même valeur et même unité) ?
  8. Définir une méthode plusGrande permettant de comparer deux Températures .

Solution:

1. La classe Temperature est décrite avec deux attribut: température de type double et unité de type String.
public class Temperature {

    double temperature;
    String unite;

public Temperature(){
    this.temperature=0;
    this.unite="Kelvin";
}
Le constructeur n'a pas d'attributs puisqu'il sert seulement à initialiser la température à zéro Kelvin. l'unité est initialisé avec "Kelvin".

2.
public Temperature(double temperature, String unite){
    this.temperature=temperature;
    this.unite=unite;
}
Ce constructeur est le plus complet parce qu'il initialise la température et logiquement il faut initialiser l'unité aussi.

3.
public Temperature(Temperature T){
    this.temperature=T.temperature;
    this.unite=T.unite;
}
Ce constructeur initialise la classe Temperature avec une instance T de type Temperature dèja crée, il est similaire au constructeur de la question 2 sauf que dans la question 2 on a fait passer les attributs de la classe. Il est conseillé d'utiliser ce constructeur dans le cas ou deux températures T1 et T2 sont égaux et T1 existe déjà de la manière : Temperature T2 = new Temperature(T1) .

4.
Afficher les arguments
public void affTemperature() {
    System.out.println(this.temperature);
}
public void affUnite() {
    System.out.println(this.unite);
}
L'affichage dans la console se fait toujours avec println.  

Modifier les arguments
public void setTemperature(double temperature) {
    this.temperature = temperature;
}
public void setUnite(String unite) {
    this.unite = unite;
}
La modification consiste à donner une nouvelle valeur qui est passée en argument de la méthode. Eclipse génère automatiquement les Getters et Setters, Getters pour lire la variable et Setters pour modifier. Cliquez avec le bouton droit de la souris --> Sources --> Generate Getters and Setters puis sélectionnez les attributs lesquels vous voulez générer les méthodes et cliquez OK.
5. Conversion Kelvin --> Celsius
public void conversionKC(){
   double Tc=0;
   //On converte si la température initiale est en Kelvlin
   if(unite=="Kelvin"){
       Tc = this.temperature - 213.15;
       this.temperature=Tc;
       this.unite="Celsius";
   }
}
Avant de convertir il faut vérifier que l'unité est "Kelvin". La conversion est simple, il suffit applique juste la formule sans oublier de changer l'unité en "Celsius".

6.Conversion Celsius--> Fahrenheit
public void conversionCF(){
   double TF=0;
   //On converte si la température initiale est en Celsius
   if(unite=="Celsius"){
       TF = 9/5*this.temperature + 32;
       this.temperature=TF;
       this.unite="Fahrenheit";
   }
}

7. Tester si deux températures sont égaux
boolean estegale(Temperature T2){
    //tester si les unités et les températures sont égaux
    if(this.unite==T2.unite && this.temperature==T2.temperature)
        return true;
    //sinon retroune false par défaut
    return false;
}
Tester signifie qu'on va utiliser une fonction qui va retourner quelque chose. Dans notre cas soit Vrai soit faux donc le type de retour est booléen. La fonction retourne false par défaut dans le cas ou T1 est égale pas à T2.

8. Laquelle est la plus grande
void plusGrande(Temperature T2){
     //tester si les unités sont égaux
     if(this.unite==T2.unite){
        if(this.temperature==T2.temperature)
           System.out.println("T1("+this.unite+", "+this.temperature+") est plus grande que "+"T2("+T2.unite+", "+T2.temperature+")");
        else
           System.out.println("T2("+T2.unite+", "+T2.temperature+") est plus grande que "+"T1("+this.unite+", "+this.temperature+")");
      }
}
Avant de tester si T1 est égale T2 il faut que les unités soient égaux. On peut éviter ce test si on converti une des température vers l'unité de l'autre. Dans cet exercice il n'est pas demandé de faire ceci.

Code complet:

package Temperature;

public class Temperature {
      
       double temperature;
       String unite;
      
       /*
        * 1er constructeur
        */
       public Temperature(){
             this.temperature=0;
       }
       /*
        * deuxième constructeur
        */
       public Temperature(double temperature, String unite){
             this.temperature=temperature;
             this.unite=unite;
       }
       /*
        * troisième constructeur
        */
       public Temperature(double temperature){
             this.temperature=temperature;
       }
      
       /*
        * Afficher les éléments
        */
       public void affTemperature() {
             System.out.println(this.temperature);
       }
       public void affUnite() {
             System.out.println(unite);
       }
       /*
        * Modifier les éléments
        */
       public void setTemperature(double temperature) {
             this.temperature = temperature;
       }
       public void setUnite(String unite) {
             this.unite = unite;
       }
      
       /*
        * Conversion Kelvin-->Celsius
        */
       public void conversionKC(){
             double Tc=0;
             //On converte si la température initiale est en Kelvlin
             if(unite=="Kelvin"){
                    Tc = this.temperature - 213.15;
                    this.temperature=Tc;
                    this.unite="Celsius";
             }
       }
       /*
        * Conversion Celsius-->Fahrenheit
        */
       public void conversionCF(){
             double TF=0;
             //On converte si la température initiale est en Celsius
             if(unite=="Celsius"){
                    TF = 9/5*this.temperature + 32;
                    this.temperature=TF;
                    this.unite="Fahrenheit";
             }
       }
       /*
        * tester l'égalité de deux température
        */
       boolean estegale(Temperature T2){
             //tester si les unités et les températures sont égaux
             if(this.unite==T2.unite && this.temperature==T2.temperature)
                    return true;
             //sinon retroune false par défaut
             return false;
       }
       /*
        * Comparer deux températures
        */
       void plusGrande(Temperature T2){
             //tester si les unités sont égaux
             if(this.unite==T2.unite){
                    if(this.temperature==T2.temperature)
                          System.out.println("T1("+this.unite+", "+this.temperature+") est plus grande que "+
                    "T2("+T2.unite+", "+T2.temperature+")");
                    else
                          System.out.println("T2("+T2.unite+", "+T2.temperature+") est plus grande que "+
                                       "T1("+this.unite+", "+this.temperature+")");
             }
       }
      
       public static void main(String[] args) {
             Temperature T1 = new Temperature(16, "Celsius");
             Temperature T2 = new Temperature(238.4, "Kelvin");
             /*
              * Affichage
              */
             T1.affUnite();
             T1.affTemperature();
             T2.affUnite();
             T2.affTemperature();
            
             //Conversion de T2 en Celsius
             T2.conversionKC();
            
             //Comparer entre T1 et T2
             T1.plusGrande(T2);
       }
}