exercices

Données pour un conditionneur d’air

Créer une structure de données qui permettra de regrouper des informations pour un conditionneur d’air.

Votre code peut ressembler à ceci (Dans un fichier Climatisation.java):

public class Climatisation {
        // VOTRE CODE ICI
}

Les informations contenues:

  • température (mesurée en degré Celsius)

  • pression (en hectoPascal)

  • taux d’humidité (un simple pourcentage)

  • une estampille de datation (un "timestamp" exprimé sous forme de long).

  • le nom de l’appareil émetteur (qui crée la donnée).

Pour tester ce genre de données écrire un code de test très simple comme celui-ci :

public class TestClimatisation {
        // point d'entrée "magique"
        public static void main(String[] args) {
                // déclarer et allouer un objet "Climatisaiton"
                // initialiser ses composants (sauf le nom de l'émetteur)
                //
                // affichez-le en utilisant System.out.println
        }
}

Exécutez le code.

Note
Ces solutions portent de noms différents dans la mesure où nous sommes amenés à faire évoluer ces codes et à en montrer des versions différentes.
Note
Une fois cet exercice terminé, le refaire dans le cadre d’un outil intégré (IDE: Netbeans, Eclipse, Intellij,…).

création/initialisation d’un objet simple: constructeurs et références

Voici le code de la classe Paire :

public class Paire {
        int val1 ;
        int val2 ;

        // constructeur
        public Paire(int x, int y) {
                this.val1 =x ;
                this.val2 = y ;
        }
}

et le code de TestPaire.java :

public class TestPaire {
   public static void main(String[] args){
        // VOTRE CODE ICI
   }
}
  • Ecrire un code pour tester des objets de type Paire. Créez un objet Paire nommé original et affichez le en utilisant:

    System.out.println(original.val1 + " " + original.val2) ;
  • Declarer un autre objet Paire nommé copie et initialisez le en tant que copie de la référence précédente (copie = original). Affichez cette référence de la même manière que ci-dessus.

  • Modifier une variable membre de copie et afficher de nouveau copie et original

  • Expliquer ce qui vient de se passer.

initialisation d’un objet "valeur" : un constructeur et ses paramètres

Modifier le code précédent Climatisation :

  • définir un constructeur pour créer/initialiser un objet Climatisation

  • Essayer de recompiler TestClimatisation.java "tel que" (sans le modifier) : conclusions?

  • Modifier et recomplier TestClimatisation

  • Exécuter TestClimatisation

  • Modifier TestClimatisation : afficher l’estampille de l’objet puis afficher un objet java.time.Instant initialisé avec l’estampille courante. documentation de l’initialisation de l’objet Instant ICI

méthodes d’instance

Modifier le code Climatisation précédent :

  • écrire une méthode d’instance toString() qui renverra un objet String permettant de tracer l'état de l’instance courante.

  • Ecrire une méthode d’instance public double getTemperatureFarenheit(). Un objet Climatisation véhicule une température en degré Celsius mais certains utilisateurs doivent pouvoir avoir cette donnée en degré Farenheit. Pour effectuer cette conversion: ajouter 40 à la températeure, multiplier par 1,8 puis soustraire 40.

  • Modifier le main de test (si votre temperature est de 37° Celsius vous devez récupérer 98,6° Farenheit)

membres static

Modifier le code de Climatisation :

  • (facultatif) Mettre les valeurs 40 et 1,8 utilisées dans les calculs précédents sous forme de constante static final.

  • Créer une nouvelle constante de type double et de valeur 0,0295299831 .

  • Utiliser cette constante pour écrire une méthode d’instance public double getPressionPoucesMercure(). Cette méthode convertit la pression en hectoPascal en pouces de mercure (Inches of Mercury: mesure employée aux U.S.). Utiliser la précédente constante comme facteur de conversion. Tester cette méthode.

  • Modifier le code précédent de manière à ce que le résultat soit arrondi à deux chiffres après la virgule. On peut, par exemple, multiplier la valeur par 100 puis l’arrondir au moyen de cette méthode, puis diviser par 100 (ce calcul est une approximation bien suffisante pour les besoins de l’exercice).

tableaux

Créer une classe TestTableaux doté d’un simple main qui contiendra:

  • La déclaration et l’initialisation d’un tableau de ints (la taille devra être supérieure à 3)

  • La déclaration et l’initialisation d’un tableau d’instances de Climatisation (la taille devra être supérieure à 3);

  • Afficher le second et le dernier élément de chaque tableau

Combien vaut un "ZOZO" ?

Et bien il faut rendre hommage au célèbre professeur Shadoko (auteur de la théorie mathématiques des passoires) pour avoir enfin su répondre à cette question.

écrire un code qui permette de transcrire un nombre quelconque en numération Shadok (et réciproquement!). (par la même occasion consulter les documentations des classes java.lang.Integer et java.lang.String)

énumérés (enum)

(Pour révisions et approfondissements)

Créer une classe très simplifiée pour décrire une chemise vendue par un magasin. Les membres seront:

  • Le nom du modèle

  • La couleur (utiliser le type java.awt.Color)

  • La Taille (de XS, S à XL, XXL).

Ecrire un constructeur et une méthode String toString()

Ecrire un main pour créer une instance de ce type (utiliser les constantes de classe de java.awt.Color) et l’afficher.

lire un code et l’utiliser

Voici un code java :

public class CharPicker {

        // variable membre initialisée
        //
        java.util.Random luck = new java.util.Random() ;


        // méthode membre
        public char pickCharIn(String aString) {
                int length = aString.length() ;
                int index = luck.nextInt(length) ;
                return aString.charAt(index) ;
        }
}
  • Lire soigneusement la documentation des classes java.util.Random et java.lang.String et essayer de bien comprendre comment ce code fonctionne.

  • Ecrire un code de test :

public class TestCharPicker {

    public static void main(String[] tbArgs) {
        CharPicker picker = new CharPicker();
        // VOTRE CODE
    }
}

Vous pouvez maintenant écrire un code plus complexe: la classe BiscuitChinois.

Un BiscuitChinois a une méthode prédiction qui rend une chaîne de caractères.

  • créer la classe BiscuitChinois: Elle a comme membre un tableau de String (initialisez ce tableau: nous n’allons pas utiliser un constructeur. Ce tableau est partagé par toutes les instances de la classe).

  • écrire la méthode prédiction() qui renvoie un objet String choisi au hasard dans le tableau (rappelez-vous de la méthode nextInt dans java.util.Random)

  • écrire un code de test qui crée un BiscuitChinois et affiche quelques résultats de l’appel de prédiction().

biang (un exemple de code à ne pas écrire!)

Exemples

Données pour un conditionneur d’air

public class Climatisation1 {
    double temperature;
    double pression;
    int humidité ;
    long estampille ;
    String sourceId ;

}
public class TestClimatisation1 {
    public static void main(String[] args) {
        Climatisation1 data = new Climatisation1() ;
        data.temperature = 37.6 ;
        data.pression = 1024 ;
        data.humidité = 90 ;
        data.estampille = System.currentTimeMillis();
        // data.sourceId  pas initialisé pour le moement
        System.out.println(data) ; // une bien curieuse trace!
        System.out.println(data.pression) ;
        System.out.println(data.sourceId) ;  // tiens curieuse trace aussi
    }

}

création/initialisation d’un objet simple: constructeurs et références

public class Paire {
        int val1 ;
        int val2 ;

        public Paire(int x, int y) {
                this.val1 =x ;
                this.val2 = y ;
        }


        // ici le test est dans la classe elle-même

        public static void main (String[] args) {
                Paire original = new Paire(3 , 4 ) ;
                System.out.println( "original: " + original.val1+ " " +original.val2) ;
                Paire copie = original ;
                System.out.println( "copie: " + copie.val1+ " " +copie.val2) ;
                // now modify copy
                copie.val1 = -1 ;
                System.out.println( "copie modifiée: " + copie.val1+ " " +copie.val2) ;
                System.out.println( "original: " + original.val1+ " " +original.val2) ;

        }
}

initialisation d’un objet "valeur" : un constructeur et ses paramètres

public class Climatisation2 {

    final double temperature;
    final double pression;
    final int humidité;
    final long estampille = System.currentTimeMillis();
    final String sourceId;

    public Climatisation2(String src, double temp, double press, int humid) {
        this.sourceId = src;
        this.temperature = temp;
        this.pression = press;
        this.humidité = humid;
    }
}
public class TestClimatisation2 {
    public static void main(String[] args) {
        Climatisation2 data = new Climatisation2("sourceA", 37.6, 1024,90) ;
        System.out.println(data);
        System.out.println(data.estampille);
        // on utilise un autre objet  ...
        System.out.println(java.time.Instant.ofEpochMilli(data.estampille));

    }


}

méthodes d’instance

public class Climatisation3 {

    /**
     * mesurée en degrés Celsius
     */
    final double temperature;
    /**
     * mesurée en  HectoPascal
     */
    final double pression;
    /**
     * pourcentage d'humidité
     */
    final int humidité;
    final long estampille = System.currentTimeMillis();
    final String sourceId;

    public Climatisation3(String src, double temp, double press, int humid) {
        this.sourceId = src;
        this.temperature = temp;
        this.pression = press;
        this.humidité = humid;
    }

    public double getTemperatureFarenheit() {
        return ((this.temperature + 40) * 1.8) - 40;
    }


    public String toString() {
        return this.temperature + ":" + this.pression + ":" + this.humidité;
    }

    public static void main(String[] args) {
        // prabablement pas une donnée réaliste  !
        Climatisation3 data = new Climatisation3("control3", 37., 1020., 60);
        System.out.println(data.getTemperatureFarenheit());
        System.out.println(data.toString());
    }
}

membres static

public class Climatisation4 {

    static final int DIFF = 40;
    static final double RATIO = 1.8;
    static final double HECTP_INCH_RATIO = 0.0295299831;
    /**
     * mesurée en degré Celsius
     */
    final double temperature;
    /**
     * mesurée en   HectoPascal
     */
    final double pression;
    /**
     * pourcentage
     */
    final int humidité;
    final long estampille = System.currentTimeMillis();
    final String sourceId;

    public Climatisation4(String src, double temp, double press, int humid) {
        this.sourceId = src;
        this.temperature = temp;
        this.pression = press;
        this.humidité = humid;
    }

    public double getTemperatureFarenheit() {
        return ((this.temperature + DIFF) * RATIO) - DIFF;
    }

    public double getPressionPoucesMercure() {
        double val = this.pression * HECTP_INCH_RATIO;
        return Math.rint(val * 100) / 100;
    }

    public String toString() {
        return this.temperature + ":" + this.pression + ":" + this.humidité;
    }

    public static void main(String[] args) {
        // probablement pas une mesure réaliste!
        Climatisation4 data = new Climatisation4("control3", 37., 1020., 60);
        System.out.println(data.getTemperatureFarenheit());
        System.out.println(data.getPressionPoucesMercure());
        System.out.println(data.toString());
    }
}

tableaux

public class TestTableaux {
        public static void main(String[] args){
                int[] tabInts = {-1, 0, 1, 0xFFFFFFFF } ;
                Climatisation4[] tabData = {
                    new Climatisation4("control0", .0, 1020., 20),
                    new Climatisation4("control1", 37., 1024., 80),
                    new Climatisation4("control2", 30., 1020., 60),
                    new Climatisation4("control3", 37., 1020., 60),
                } ;
                System.out.println(tabInts[1]) ;
                System.out.println(tabData[1]) ;
                //
                // bien comprendre ce qui se passe ici !
                System.out.println(tabInts[tabInts.length-1]) ;
        }
}

énumérés (enum)

public class ChemiseSimplex {
    final String modèle ;
    final java.awt.Color couleur ;
    final Taille taille ;

    public ChemiseSimplex( String model, java.awt.Color clr, Taille taille){
            this.modèle = model ;
            this.couleur = clr ;
            this.taille = taille ;
    }

    public String toString() {
        return this.modèle + " " +this.couleur + " " +this.taille ;
    }

    public static void main(String[] args) {
        ChemiseSimplex shirt = new ChemiseSimplex("mao", java.awt.Color.RED, Taille.XS) ;
        System.out.println(shirt);
    }


}
public enum Taille {
    XS, S, M, L , XL ,XXL ;
}

lire un code et l’utiliser

public class TestCharPicker {

    public static void main(String[] tbArgs) {
        CharPicker picker = new CharPicker();
        System.out.println(picker.pickCharIn("ABCDEFGHIJKLMNOPQRST"));
        System.out.println(picker.pickCharIn("ABCDEFGHIJKLMNOPQRST"));
        System.out.println(picker.pickCharIn("0123456789"));
        System.out.println(picker.pickCharIn("0123456789"));

    }
}
public class BiscuitChinois {
    // partagé par toutes les instances!

    static String[] prédictions = {
            "Attention: traversée de shadoks!",
            "Vous allez bientôt rencontrer une blonde (une VRAIE blonde!)",
            "Ne sortez pas de votre maison demain!",
            "Essayez encore! le prochain tirage sera bénéfique!",
            "Le soleil brillera (bientôt)...",
            "Donnez ce biscuit au chien!",
            "nin cóng zao dào wan dou you yáng guang",
            "nán chi jí le!" ,


    } ;

    java.util.Random rand = new java.util.Random() ;

    public String prédiction() {
        return prédictions[rand.nextInt(prédictions.length)];
    }

    public static void main(String[] tbArgs) {
        BiscuitChinois sagesse = new BiscuitChinois();
        System.out.println(sagesse.prédiction());
    }
}
/**
 * Ici chaque biscuit est porteur de son propre message (ce qui est le cas
 * dans le monde "réel").
 *
 * @author pbamade
 */
public class UnBiscuitChinois {
        // MEMBRES STATIC  partagé par toutes les instances!
    static String[] prédictions = {
            "Attention: traversée de shadoks!",
            "Vous allez bientôt rencontrer une blonde (une VRAIE blonde!)",
            "Ne sortez pas de votre maison demain!",
            "Essayez encore! le prochain tirage sera bénéfique!",
            "Le soleil brillera (bientôt)...",
            "Donnez ce biscuit au chien!",
            "Ne croyez pas ce qui est inscrit ici !",

    } ;
    static java.util.Random rand = new java.util.Random() ;

        // MEMBRE D'INSTANCE
    final String prédiction ;

    public String getPrédiction() { return this.prédiction ; }

        // CONSTRUCTEUR
    public UnBiscuitChinois() {
            this.prédiction = prédictions[rand.nextInt(prédictions.length)] ;
    }

    public static void main(String[] args) {
                UnBiscuitChinois biscuit1 = new UnBiscuitChinois() ;
                UnBiscuitChinois biscuit2 = new UnBiscuitChinois() ;
                   System.out.println(" prédiction :" + biscuit1.getPrédiction());
                   System.out.println(" prédiction :" + biscuit2.getPrédiction());
        }

}