Professional Documents
Culture Documents
10.1
Lobjectif est de stocker les notes d’un étudiant sous la forme d’une liste.
a. Définissez un objet note de type ArrayList comme variable d’instance
de la classe Etudiant. La liste note ne peut contenir que des valeurs de type
Double.
b. Modifiez le constructeur de la classe Etudiant afin de saisir les notes et
de les placer dans la liste.
Prenez garde que seul un objet peut être stocké dans une liste. Une note,
étant de type double (type simple), ne peut pas être directement placée
dans la liste. Il est nécessaire de la transformer en objet de type Double.
L’appel au constructeur de la classe Double permet cette transformation.
Remarque :
L’instruction new Double ( lectureClavier . nextDouble ( ) )
permet la transformation directe d’une valeur double saisie au davier en un
objet de type Double.
c. La méthode calculMoyenne ( ) doit calculer la moyenne des notes à
partir des notes saisies dans le constructeur. Le programme doit, par
conséquent, parcourir l'ensemble de la liste note afin d’en calculer la
somme. Vous utiliserez pour cela, la nouvelle syntaxe de la boucle for.
d. Dans la méthode afficheUnEtudiant (), modifiez l’affichage des notes en
parcourant, non plus le tableau, mais la liste note, et ce en utilisant la
nouvelle syntaxe de la boucle for.
10.2
Reprendre l’application FaireDesFormesGeometriques et les classes
Forme, Triangle et Rectangle développées au cours des exercices 8.6 à
8.8 du chapitre 8, «Les principes du concept d'objet » ainsi que la classe
Cercle, décrite au cours de ce même chapitre.
Lobjectif est de créer une liste de Forme à l’aide de la classe
ListeDeFormes. Cette dernière est composée :
a. D’une propriété ListeFormes de type ArrayList. En utilisant les types
génériques, faites-en sorte que la liste ne puisse contenir que des objets de
type Forme.
b. D’un constructeur initialisant la propriété listeFormes.
10.4
L’objectif est d’écrire une méthode qui affiche le major de la promotion en
utilisant les streams et expressions lambda. La méthode a pour nom
rechercheLeMajor {).
a. Dans la classe Etudiant écrire la méthode quelleMoyenne ( ) qui retourne
la moyenne de l’étudiant.
b. Dans la classe Cursus écrire la méthode rechercheLeMajor ( ) qui retourne
l'étudiant qui a la meilleure moyenne de la promotion. Pour information,
l’expression lambda qui calcule la plus grande valeur d'une liste de nombres
s’écrit comme suit :
liste.stream().max {(a, b) -> (a.quelleValeur ( )
b.quelleValeur())}
L’expression get ( ) appliquée ensuite à l'expression max ( ) permet de
récupérer la plus grande valeur trouvée par max ( ).
c. Dans l’application GestionCursus ajouter une cinquième option au menu
qui permet d’afficher l’étudiant major de la promotion.
10.5
L’objectif est d’écrire une méthode modifieUnEtudiant ( ) qui modifie les
notes d’un étudiant stocké dans un dictionnaire. Cette méthode fonctionne
dans l’ensemble comme la méthode ajouteUnEtudiant () (voir la section «
Les dictionnaires » de ce chapitre).
a. Cependant, la méthode doit connaître les nom et prénom de l’étudiant à
modifier. Ces données lui sont transmises par paramètre.
b. Ensuite, connaissant les nom et prénom, le programme calcule la de et
vérifie si l’étudiant existe dans la liste.
c. S’il existe, la modification consiste à lui donner de nouvelles notes. Pour
cela, l'idée est d’écrire un deuxième constructeur Etudiant ( ), dont les
paramètres sont les nom et prénom de l’étudiant. Le corps du constructeur
ne fait ensuite que stocker dans les variables d’instance appropriées les nom
et prénom passés en paramètres, sans avoir à les ressaisir, puis saisir les
nouvelles notes et enfin calculer la moyenne.
d. Modifiez l'application GestionCursus de façon à intégrer au menu cette
nouvelle option.
10.6
Reprendre l'application Bibliothèque et la classe Livre développées au cours
des exercices 8.1 à 8.5 du chapitre 8, « Les principes du concept d’objet ».
a. L’objectif est de créer un dictionnaire composé de Livre à l'aide de la
classe ListeDeLivres. Cette dernière est composée :
D’une propriété liste de type HashMap. En utilisant les types génériques,
faites en sorte que le dictionnaire ne puisse contenir que des objets de type
Livre.
b. D'un constructeur initialisant la propriété liste.
c. D’une méthode ajouterUnLivre () qui permet l’ajout d'un livre dans le
dictionnaire. La clé d'association est calculée grâce à la méthode getCode ( )
définie dans la classe Livre.
d. D'une méthode rechercherUnLivre ( ) qui affiche le livre dont le nom, le
prénom de l’auteur, la catégorie et le numéro ISBN sont fournis en
paramètre de la méthode.
Remarque : Le calcul de la clé s'effectue en créant un livre temporaire grâce
au constructeur de la classe Livre. Le calcul du code d’un livre ne nécessite
pas de connaître son titre, vous pouvez passer en paramètre du constructeur
la valeur null, en lieu et place du paramètre représentant le titre du livre.
Si le livre est retrouvé dans la liste, la méthode rechercherUnLivre ( )
affiche les informations le concernant.
e. D'une méthode supprimerUnLivre ( ) qui supprime le livre dont le
nom, le prénom de l’auteur, la catégorie et le numéro ISBN sont fournis en
paramètre de la méthode.
• Le calcul de la clé s’effectue selon la méthode décrite au point d.
• Si le livre est retrouvé dans la liste, la méthode supprimerUnLivre ( )
supprime le livre de la liste.
f. D’une méthode afficherLesLivres ( ) qui affiche les objets de la
liste en parcourant, à l’aide d’une boucle for, l’ensemble du dictionnaire.
g. Créer l’application Bibliothèque qui réalise les opérations proposées par le
menu suivant :
1. Ajouter un livre
2. Supprimer un livre
3. Afficher la liste des livres
4. Afficher un livre
5. Sortir
Remarque
Les options 2 et 4 demandent la saisie des nom et prénom de l’auteur, de la
catégorie du livre ainsi que du numéro ISBN pour obtenir la clé d'association
et effectuer les recherches dans la liste, Vous pouvez simplifier la tâche de
l’utilisateur en lui proposant de ne saisir que les 2 derniers chiffres du
numéro ISBN.
10.7
L'objectif est de créer un fichier Formes.txt contenant les données
relatives à chaque forme géométrique enregistrée dans la liste
listeFormes créée au cours de l'exercice 10.2.
Le fichier possède autant de lignes qu’il y a d'objets placés dans la liste.
Chaque forme est représentée par une chaîne de caractères spécifique ;
• Un cercle est représenté par C; couleur ;x; y; rayon.
• Un rectangle par R; couleur ; x; y; largeur; hauteur.
• Un triangle par T ; couleur ; x ; y ; xl ; y 1 ; x2 ; y2 ;.
a. Examinez la méthode getinfos ( ) de la classe Forme ci-après et
donnez la structure de la chaîne retournée par la méthode.
public String getInfos( ) {
return couleur+";”+x+";"+y;
}
Pour chacune des classes fille (Triangle, Cercle, . . . ), écrire une méthode
getinfos ( ) en faisant appel à la méthode getinfos ( ) de la classe mère.
• Faites en sorte que chacune des chaînes résultantes corresponde au format
demandé .
b. Pour enregistrer dans le fichier Formes . txt, les données relatives à
chaque forme géométrique, la technique consiste à définir dans la classe
ListeDeFormes, une méthode enregistrerLesFormes ( Fichier f ) qui :
• parcourt la liste listeFormes et récupère grâce à la méthode la méthode
getinfos ( ) les informations sous la forme d'une chaîne de caractères ;
• enregistre la chaîne en utilisant la méthode ecrire ( ) de la classe Fichier
proposée en
section « Les fichiers textes ,, .
c. L’enregistrement est effectif, lorsque la méthode
enregistrerLesFormes () est appelée depuis l'application
FaireDesListesDeFormes. Pour cela :
• créez un objet F de type Fichier ;
• appelez la méthode enregistrerLesFormes ( ) lorsque l'utilisateur choisit de
sortir de l'application, en l'appliquant sur l'objet LdF et, en passant en
paramètre l'objet F.
d . Pour lire les informations enregistrées dans le fichier Formes.txt, il
convient de mettre en place un mécanisme de découpage de chaque ligne
lue, de façon à récupérer les informations comme la position en x, y, le type
de la forme, . . .
Pour cela, vous devez modifier la méthode Lire( ) de la classe Fichier
comme suit :
• La méthode lit une ligne du fichier à la fois et l'enregistre dans la chaîne
de caractère ligne.
• La chaîne Ligne est découpée en utilisant un objet StringTokenizer
comme suit :
import java.util.* ;
StringTokenizer stnew StringTokenizer ( ligne ,
separateur) ;
int i = 0 ;
String mot [] = new String [ st.countTokens ( ) ;
while ( st. hasMoreTokens ( ) ) {
mot [ i ] = st.nextToken ( ) ;
i++ ;
}
Remarque
La classe StringTokenizer est une classe du paquetage java .util , dans
laquelle est défini un ensemble de méthodes permettant l'extraction de
mots dans une chaîne de caractères.
Chaque mot doit être séparé par un caractère donné (ici, vous prendrez le
séparateur " ; ").
L’exécution de ces instructions a pour résultat de placer dans mot [ 0 ] le
caractère correspondant au cercle (C), au rectangle (R) ou au triangle (T),
dans mot [ 1 ] la couleur, dans mot [ 2 ] la position en x, etc.
La méthode Lire ( ) retourne en résultat le tableau mot.
e. Pour lire l'ensemble du fichier, définissez dans la classe ListeDeFormes, la
méthode lireLesFormes ( Fichier f ) . Cette méthode : Parcourt le
fichier jusqu'à obtention d'une ligne null.
• Récupère, pour chaque ligne lue grâce à la méthode lire ( ) , un
tableau dont le premier élément est testé et s'il contient le caractère ' C ' ,
la méthode crée un cercle à l'aide du constructeur Cercle ( ) en passant
en paramètre les valeurs contenues dans la suite du tableau.
• Construit de la même façon un rectangle si le caractère est un ' R ' , un
triangle si c'est un ' T ' .
• Les objets crées sont ajoutés à la liste listeFormes .
10.10
Reprendre la classe EncodageParDefaut donnée en exemple au chapitre
2, " Communiquer une information » , à la section " Les caractères
spéciaux».
Sachant que l'encodage d'une chaîne de caractères peut entraîner une erreur
du type Unsupported EncodingException, écrire un bloc try et un bloc
catch réalisant la capture de cette exception.
a. Le bloc try est utilisé pour réaliser l'encodage de la chaîne proverbe.
b. Le bloc catch affiche un message indiquant que le codage par défaut n'est
pas supporté par l'interpréteur Java.
L’application Projet
Dans l’application p r o je t, déclarer l’objet C comme étant du type
ListeCompte. Puis :
11.5
L’objectif de cet exercice est de réaliser une application qui : affiche des
formes géométriques lues à partir du fichier Formes.txt créé au cours de
l'exercice 10.5 du chapitre précédent ; propose à l’utilisateur deux boutons
interactifs placés en bas de la fenêtre, comme le montre la figure suivante
:
Figure 11-10 L’application affiche les formes enregistrées dans le fichier
Formes.txt ainsi que deux boutons « À gauche / scène » et « À gauche
/formes ».
Lorsque l’utilisateur clique sur le bouton << A gauche / scène, les formes
géométriques se déplacent toutes sur le bord gauche de la scène, comme le
montre la figure 11.11.
Calcul de statistiques
Les classes ListeCompte et Compte
En reprenant la fonction pourcentage() réalisée en exercice à la fin
du chapitre 5, « De
l’algorithme paramétré à l’écriture de fonctions », et sachant que
l’objectif est de calculer en pourcentage les dépenses réalisées en fonction
du motif de la dépense :
a. Déterminer toutes les données, définies dans les classes Compte et
LigneComptable, nécessaires aux calculs des statistiques d’un compte.
b. Vérifier que ces données soient accessibles depuis l'extérieur de la
classe. Si tel n’est pas le cas, écrire les méthodes d’accès en consultation
pour chacune d’entre elles.
c. Après modifications, compiler et exécuter le programme de façon à
créer un fichier de
comptes (Compte.dat).
La méthode statParMoti()
a. En reprenant l’algorithme de calcul de statistiques proposé en
exemple du chapitre I,
« Stocker une information », écrire la méthode statParMotif () qui
calcule le pourcentage des dépenses en fonction du motif enregistré.
b. Sachant que cette méthode est définie à l'intérieur d’une classe
appelée Stat, déterminer les variables d’instance de cette classe.
C. Avant de passer à ra l’affichage graphique, écrire une application qui :
- lise le fichier Compte.dat créé à l’étape précédente ;
- utilise la méthode statParMotif () pour calculer et afficher à l’écran
les statistiques d’un compte donné.
d. Vérifier la validité des calculs réalisés.
L'interface graphique
Pour calculer les statistiques d’un compte, ¡’utilisateur doit fournir le
numéro du compte choisi. Après lecture du fichier Compte.dat, et
connaissant ce numéro, l’application vérifie s’il existe en mémoire. Si tel est
le cas, elle affiche dans une fenêtre le résultat sous forme d’histogrammes
empilés. Dans le cas contraire, elle affiche un message indiquant que ce
compte n’est pas connu et attend la saisie d'un nouveau numéro.
Deux étapes sont donc à réaliser, la saisie d’un numéro de compte et
l’affichage de l’histogramme.
L’affichage de l’histogramme
Pour afficher l’histogramme empilé, il est nécessaire de connaître les
pourcentages de dépenses en fonction des motifs déclarés. Ces valeurs sont
calculées dans la classe Stat, construite précédemment.
a. Eu s’inspirant de la méthode dessin e () présentée en exemple an cours de
ce chapitre, écrire dans la classe Stat la méthode dessine () de façon à
afficher :
- un premier rectangle de hauteur 10 0 et de largeur 50 représentant l ’unité
de crédit (100) ;
- des rectangles de couleur et de hauteur différentes suivant les
pourcentages calculés par la méthode statParMotif ().
Noter que l’affichage d’un rectangle rempli s’effectue par l’intermédiaire de
la méthode
fillRect (x, y, l, h ) , où X et y représentent la position à l’écran
du coin supérieur gauche du rectangle, et l et h sa largeur et sa hauteur.
L’affichage d’un texte est réalisé par la méthode
drawstring(texte,x,y), où texte est un objet de type String dans
lequel sont placés les caractères à afficher, x et y définissant la position de
ce texte à l’écran.
h. Définir une fenêtre composée d’une zone de dessin et d’un bouton
Quitter,
c. L'affichage de l’histogramme étant réalisé dans la zone de dessin,
- Le constructeur de la fenêtre doit prendre en paramètre un objet de type
Stat de façon à le transmettre au constructeur de la zone de dessin.
- La méthode paint () définie dans la classe représentant la zone de
dessin fait appel à la méthode s.dessine (), où s’est un objet de type
Stat, initialisé dans le constructeur de la zone de dessin.
d. Le bouton Quitter et l’icône de fermeture située dans la barre de titre de
la fenêtre ayant la m ê m e fonctionnalité (quitter l’application et fermer la
fenêtre) :
- Créer une classe GestionQuitter qui implémente l’écouteur
ActionListerner et dérive de la classe WindowAdapter,
- Définir les méthodes correspondant au comportement de fermeture
d’application.
La saisie d’un numéro de compte
La classe Saisie décrite ci-dessous permet la saisie d’une chaîne de
caractères par l'intermédiaire d’une fenêtre de saisie :
import java.awt,*;
import java . a w t . event. ;
public class Saisie implements ActionListener {
TextField réponse ;
public Saisie () {
Frame F = new Frame ("Saisie de valeurs :") ;
F .setSize(300, 50);
F ,setBackground(Color.white);
F .setLayout(new BorderLayout());
F.add (new label ("Valeur "West") ; réponse = new
TextField(lO); F.add(réponse, "East");
réponse,addActionListener(this);
F .setVisble(true);
}
public void actionPerformed(ActionEvent evt) {
String numéro = réponse.getText();
System.out.println(numéro) ;
}
Observer et analyser cette classe et transformer la méthode
actionPerformed () de façon à calculer puis à afficher l’histogramme
cumulé si le numéro de compte lu dans la fenêtre de saisie correspond à un
compte enregistré dans le fichier Compte.dat.