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 objetPaire
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 nouveaucopie
etoriginal
-
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 objetjava.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 objetString
permettant de tracer l'état de l’instance courante. -
Ecrire une méthode d’instance
public double getTemperatureFarenheit()
. Un objetClimatisation
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
int
s (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
etjava.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 deString
(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 objetString
choisi au hasard dans le tableau (rappelez-vous de la méthodenextInt
dansjava.util.Random
) -
écrire un code de test qui crée un
BiscuitChinois
et affiche quelques résultats de l’appel deprédiction()
.
(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());
}
}