Académique Documents
Professionnel Documents
Culture Documents
TPs Java 2022
TPs Java 2022
Travaux Pratiques de la
Programmation Orientée
Objets : Java
1 Série 1
1.1 Objectifs
L’objectif de cette première série est de vous faire familiariser avec :
1.2 Exercice 1
Ecrivez une classe CalculSurface dont la méthode main affiche la surface d'un cercle dont le
rayon est mis au début dans une variable nommée rayon. Vous prendrez 3,14 comme valeur
de pi. Le format d'affichage sera du type "la surface du cercle de rayon 1.0 est 3.14".
1.3 Exercice 2
Ecrivez une classe Maximum qui contient une méthode main qui affecte la valeur de 3
variables de type int (le code contiendra des instructions du type "valeur1 = 20;) et
affiche la plus grande des 3 valeurs.
Exécutez cette méthode main avec différentes valeurs pour tester votre code.
1.4 Exercice 3
1. Copiez, corrigez, compilez et exécutez la classe suivante. Le programme suivant devrait
afficher 3 (ou 3.0).
public class Division {
public static void main(String args) {
int x, y;
x = 3;
y = 2;
double a = x / y;
double f = a * y;
System.out.println(f);
}
}
2. Idem pour la classe suivante (la classe doit afficher "1 + 1 = 2", 1800000000, c'est-à-dire
la valeur de e, puis 36.9) :
public class Calculs {
public static void main(String args) {
int a = 1;
int b = 1;
System.out.println(a + b + " = " + a + b);
int c = 900000000;
int e = c * 2;
System.out.println("e = " + e);
System.out.println(20.1 + 16.8); // Explications ?
}
Après avoir fait exécuter cette classe, remplacez 2 par 3 dans la multiplication qui donne la
valeur de e. Ne modifiez rien d'autre, compilez et exécutez. Quelle valeur est affichée pour e ?
Expliquez et modifiez le programme pour qu'il affiche la bonne valeur.
1.5 Exercice 4
1. Ecrivez une classe MaximumClavier qui contient une méthode main qui lit 3 valeurs
saisies au clavier par l'utilisateur et affiche la plus grande des 3 valeurs (Utilisez la classe
Console plus précisément sa fonction readInt()).
Exécutez cette méthode main avec différentes valeurs pour tester votre code.
3. Ensuite, mettez dans x la plus grande valeur, puis la valeur suivante dans y et la plus petite
valeur dans z. Faites afficher les valeurs des 3 variables pour vérifier.
2 Série 2
2.1 Objectifs
L’objectif de ce TP est de vous faire travailler avec :
2.2 Exercice 1
1. Dans la méthode main d'une classe Fonctions, utilisez la classe java.lang.Math (cherchez
dans la documentation des API) pour faire afficher la racine carrée de 4 et cos(pi / 2). Un
petit étonnement pour cos(pi / 2) ?
2. Ajoutez une méthode aléatoire qui renvoie un nombre entier aléatoire compris entre 1 et n
(passé en paramètre).
3. A la suite de la méthode main faites afficher 100 nombres entiers aléatoires compris entre
1 et 10 (bornes comprises), et leur moyenne. De quel nombre la moyenne devrait-elle être
proche ?
2.3 Exercice 2
A la fin de la méthode main, appelez une méthode erreur dans laquelle vous vous arrangez
pour provoquer la levée d'une exception, par exemple en divisant par 0. Essayez de
comprendre le message d'erreur. Aide : si vous ne trouvez pas d'autres façons de lever une
exception, vous pouvez utiliser la méthode parseInt de la classe Integer.
2.4 Exercice 3
Ecrivez un programme Java qui affiche la valeur de n! pour un n entré au clavier par
l'utilisateur au début du programme.
Testez pour n = 0, n = 1 et n = 3.
2.5 Exercice 4
Reprenez l’exercice 4 de votre premier TP
2.6 Exercice 5
À partir de cet exercice, toutes les classes devront être dans un paquetage et tous les fichiers
de vos exercices devront respecter la structure préconisée dans le cours (sous-répertoires src et
classes).
Ecrivez une classe MaximumTableau avec une méthode maxTableau qui renvoie le plus
grand entier d'un tableau d'entiers passé en paramètre. Testez dans la méthode main de la
classe.
2.7 Exercice 6
Ecrivez une classe Tableau qui contient les méthodes suivantes :
1. Méthode afficheTableau qui affiche tous les éléments d'un tableau passé en paramètre
(y compris les valeurs -1) en utilisant une boucle for "normale".
2. Méthode afficheTableau2 qui affiche tous les éléments d'un tableau (y compris les
valeurs -1) en utilisant une boucle "for-each".
3. Ecrivez une méthode afficheTableau3 qui affiche seulement les éléments non vides du
tableau.
2.8 Exercice 7
Ajoutez dans la classe Tableau les méthodes suivantes :
1. Méthode initialise qui initialise à -1 tous les éléments d'un tableau passé en paramètre
(toutes les cases du tableau sont vides).
3. Méthode remplir qui remplit complètement un tableau passé en paramètre avec une
valeur passée en paramètre, en utilisant les méthodes initialise et ajouterElement ; ça
n'est évidemment pas la meilleure façon d'écrire cette méthode !
2.9 Exercice 8
Ajoutez dans la classe Tableau les méthodes suivantes :
1. Méthode rechercher qui recherche la position d'un entier dans un tableau. La méthode
renvoie -1 si l'élément n'est pas dans le tableau. La méthode renvoie 0 si l'entier est
dans le premier élément du tableau (même si le tableau contient d'autres éléments
égaux à l'entier recherché), et plus généralement, renvoie n - 1 si l'entier est dans la
position nième position du tableau.
2. Méthode rechercherTous qui renvoie toutes les positions du tableau qui contiennent
des éléments égaux à l'entier recherché dans le cas où il apparait plusieurs fois.
Attention à bien prendre en compte le cas où la valeur cherchée n'est pas dans le
tableau.
4. Méthode croissant qui indique si le tableau est trié par ordre croissant.
5. Méthode rechercher2 qui utilise la méthode croissant pour choisir une des 2 méthodes
écrites précédemment pour effectuer la recherche du premier élément d'un tableau égal
à un entier donné (évidemment, on ne recherche pas ici les performances).
La méthode renvoie l'indice du tableau de l'élément qui a été supprimé. Elle renvoie -1
si l'élément n'a pas été trouvé.
7. Ecrivez une méthode supprimerTous qui supprimer tous les éléments du tableau égaux
à une valeur donnée. Utilisez pour cela la méthode rechercherTous.
2.10 Exercice 9
Ecrivez une classe TestArrays dont la méthode main
1. crée un tableau de 150 nombres entiers et le remplit avec des nombres tirés au hasard
entre 1 et 200 ;
5. tire 20 nombres au hasard et indique s'ils appartiennent au tableau (et en ce cas, donne
la position dans le tableau) en utilisant la recherche dichotomique (voir classe Arrays).
2.11 Exercice 10
Ecrivez du code pour faire afficher les paramètres de la ligne de commande, un paramètre par
ligne.
Lorsque la ligne de commande ne contient aucun paramètre, est-ce que le tableau des
paramètres est null. S'il n'est pas null, quelle est sa longueur ?
Que se passe-t-il lorsqu'on affiche les valeurs de tous les éléments d'un tableau de longueur 0
avec une boucle for ?
Pour répondre à ces questions écrivez une classe Main qui contient une méthode main et
lancez l'exécution avec quelques paramètres ou aucun paramètre.
3 Série 3
3.1 Objectifs
Travailler avec les dates et les Chaines de caractères ainsi que les conversions de Types.
3.2 Exercice 1
3.3 Exercice 2
1. Ecrire un programme permettant de lire le nom et le prénom d'un étudiant, ensuite
transforme le nom en majuscule, la première lettre du prénom en majuscule et le reste
en minuscule.
2. Écrire un programme qui lit un mot au clavier et qui indique combien de fois sont
présentes chacune des voyelles a, e, i, o, u ou y, que celles-ci soient écrites en
majuscules ou en minuscules, comme dans cet exemple :
3. Écrire un programme qui lit un entier au clavier et qui l’affiche verticalement comme
dans cet exemple :
23 + 25 = 48
4 Série 4
4.1 Objectif
L’objectif est d’explorer les aspects d’héritage et des interfaces.
4.2 Exercice 1
• Description
o La classe Etudiant hérite de la classe Personne.
o La classe Professeur hérite de la classe Employe et la classe Employe hérite
de la classe Personne.
o Un Etudiant est une Personne.
o Un Professeur est un Employe et un Employe est une Personne.
• Travail à faire
1. Développer les classes dans le package "ma.exelib.projet.classes".
o Chaque classe doit contenir un constructeur d'initialisation.
o Chaque classe doit redéfinir la méthode toString().
2. Développer une classe de Application dans le package "Heritage.test", dans cette
classe on demande de créer :
o deux étudiants.
o deux employés.
o deux professeurs.
o afficher les informations de chaque personne.
4.3 Exercice 2
4.4 Exercice 3
Le directeur d'une entreprise de produits chimiques souhaite gérer les salaires et primes de ses
employés au moyen d'un programme Java.
Un employé est caractérisé par son nom, son prénom, son âge et sa date d'entrée en service
dans l'entreprise.
Dans un fichier Salaires.java, codez une classe abstraite Employe dotée des attributs
nécessaires, d'une méthode abstraite calculerSalaire (ce calcul dépendra en effet du type de
l'employé) et d'une méthode getNom retournant une chaine de caractère obtenue en
concaténant la chaine de caractères "L'employé " avec le prénom et le nom.
Dotez également votre classe d'un constructeur prenant en paramètre l'ensemble des attributs
nécessaires.
▪ Calcul du salaire
Le calcul du salaire mensuel dépend du type de l'employé. On distingue les types d'employés
suivants :
▪ Ceux affectés à la Vente. Leur salaire mensuel est le 20 % du chiffre d'affaire qu'ils
réalisent mensuellement, plus 400 Francs.
▪ Ceux affectés à la Représentation. Leur salaire mensuel est également le 20 %
du chiffre d'affaire qu'ils réalisent mensuellement, plus 800 Francs.
▪ Ceux affectés à la Production. Leur salaire vaut le nombre d'unités produites
mensuellement multipliées par 5.
▪ Ceux affectés à la Manutention. Leur salaire vaut leur nombre d'heures de travail
mensuel multipliées par 65 francs.
Codez dans votre fichier Salaires.java une hiérarchie de classes pour les employés en
respectant les conditions suivantes :
▪ La super-classe de la hiérarchie doit être la classe Employe.
▪ Les nouvelles classes doivent contenir les attributs qui leur sont spécifiques ainsi que
le codage approprié des méthodes calculerSalaire et getNom, en changeant le mot
"employé" par la catégorie correspondante.
▪ Chaque sous classe est dotée de constructeur prenant en argument l'ensemble des
attributs nécessaires.
▪ N'hésitez pas à introduire des classes intermédiaires pour éviter au maximum les
redondances d'attributs et de méthodes dans les sous-classes
▪ Employés à risques
Certains employés des secteurs production et manutention sont appelés à fabriquer et
manipuler des produits dangereux.
Après plusieurs négociations syndicales, ces derniers parviennent à obtenir une prime de
risque mensuelle.
Complétez votre programme Salaires.java en introduisant deux nouvelles sous-classes
d'employés. Ces sous-classes désigneront les employés des
secteurs production et manutention travaillant avec des produits dangereux.
Ajouter également à votre programme une interface pour les employés à risque permettant de
leur associer une prime mensuelle fixe de 200.-.
▪ Collection d'employés
Satisfait de la hiérarchie proposée, notre directeur souhaite maintenant l'exploiter pour
afficher le salaire de tous ses employés ainsi que le salaire moyen.
Ajoutez une classe Personnel contenant une "collection" d'employés. Il s'agira d'une collection
polymorphique d'Employe - regardez le cours si vous ne voyez pas de quoi il s'agit.
Définissez ensuite les méthodes suivantes à la classe Personnel :
▪ void ajouterEmploye(Employe)
qui ajoute un employé à la collection.
▪ void calculerSalaires()
qui affiche le salaire de chacun des employés de la collection.
▪ double salaireMoyen()
qui affiche le salaire moyen des employés de la collection.
Testez votre programme avec le main suivant :
class Salaires {
public static void main(String[] args) {
Personnel p = new Personnel();
p.ajouterEmploye(new Vendeur("Pierre", "Business", 45, "1995", 30000));
p.ajouterEmploye(new Representant("Léon", "Vendtout", 25, "2001", 20000));
p.ajouterEmploye(new Technicien("Yves", "Bosseur", 28, "1998", 1000));
p.ajouterEmploye(new Manutentionnaire("Jeanne", "Stocketout", 32, "1998", 45));
p.ajouterEmploye(new TechnARisque("Jean", "Flippe", 28, "2000", 1000));
p.ajouterEmploye(new ManutARisque("Al", "Abordage", 30, "2001", 45));
p.afficherSalaires();
System.out.println("Le salaire moyen dans l'entreprise est de " + p.salaireMoyen() + "
francs.");
}
}
Vous devriez obtenir quelque chose comme :
4.6 Exercice 5
Créez une classe Liquide contenant seulement une méthode imprimer() qui affiche : ”je suis
un liquide”. Créez 2 classes dérivées de la classe Liquide, les classes Cafe et Lait, dont les
méthodes imprimer() affichent respectivement ”je suis un Café”, ”je suis du Lait”. Enfin vous
créerez une classe Tasse ayant un attribut l de la classe Liquide et une méthode
AjouterLiquide (Liquide li) et une méthode imprimer(). Testez l’utilisation : créer un tableau
de Tasses qui contient des différents liquides.
5 Série 5
5.1 Objectifs
L’objectif de ce TP est de vous faire travailler avec les interfaces et les classes abstraites.
Notez que :
• Une interface ne peut pas avoir de méthodes déclarées static (contrainte levée en Java8).
• Ne peut pas avoir de méthodes implémentées non plus (à la différence des classes
abstraites (contrainte levée en Java8, voir plus loin)
• final variable ne peut être modifiée.
• La réalisation (ou "implémentation") d'une interface, c'est définir des méthodes déclarées.
Elle doit être faite dans une classe séparée
• Une classe abstraite ne contient pas forcément des méthodes abstraites. Le fait qu'une
classe soit abstraite, implique qu'on ne peut pas en créer des instances. Il faut alors en
dériver des sous classes pour pouvoir instancier des objets et leur appliquer des méthodes.
• Mais une classe qui contient une méthode abstraite doit être déclarée abstraite. De même,
une sous-classe qui ne fournit pas l'implantation d'une méthode abstraite héritée (déclarée
dans une classe mère), doit être déclarée abstraite à son tour.
• Une classe abstraite permet de déclarer des membres non publics. Dans une interface,
toutes les méthodes doivent être publiques.
• Une classe peut implanter plusieurs interfaces mais ne peut avoir qu'une seule superclasse.
• Une interface n'appartient pas à la hiérarchie des classes issues de Object. Des classes sans
aucun rapport entre elles peuvent implanter la même interface. Alors que les classes qui
dérivent d'une même classe abstraite appartiennent à une même famille.
• On peut rajouter de nouvelles méthodes à une classe abstraite sans conséquences sur le
reste. Si on veut rajouter un profile de méthode à une interface, il faut la définir dans
toutes les classes qui réalisent l'interface. A moins d'en fournir une définition (par défaut)
dans l'interface elle-même (nouveau depuis Java8).
• Une interface peut faire extends de plusieurs autres interfaces (Le vérifier sur un
exemple interface C extends A , B {} ).
• A partir de Java 8, une interface peut fournir une implémentation par défaut pour une
méthode. Les classes qui réalisent l'interface peuvent redéfinir ou pas cette méthode. Si
elles ne la redéfinissent pas, c'est la méthode donnée dans l'interface qui sera invoquée par
les classes appelantes.
5.2 Exercice 1
Soit l’interface Pile qui représente une pile de caractères, défini par l'interface:
interface Pile {
final int MAX = 8;
On peut réaliser cette pile par une chaîne de caractères ou un tableau de caractères etc.
On peut utiliser StringBuilder pour mémoriser les caractères d'une pile. Déclarer par
exemple :
c = s.charAt (i);
1. Utiliser ce qui précède pour créer une classe MaPile qui implémente une pile
avec StringBuilder.
Indication : empiler en rajoutant les caractères les uns derrière les autres, par exemple "b",
"br", "brd" etc.
2. Ecrire un programme test qui lit des caractères et les imprime en ordre inverse. Dernier
caractère lu est '#'.
On peut utiliser un tableau Java pour mémoriser les caractères d'une pile. Déclarer par
exemple :
3. Créer une classe TaPile qui implémente une pile avec un tableau cette fois-ci.
5.3 Exercice 2
Soit l'interface:
interface MonApi {
// Interface avec des outils pour
// - imprimer un objet
// - convertir un objet vers format imprimable (cf. toString)
// - comparer deux objets (inférieur, égal, supérieur)
Méthodes :
La chose à noter ici, c'est qu'on a deux objets (point et article) sans aucun lien conceptuel qui
sont "interchangeables" ici car de "même type".
5.4 Exercice 3
1. Créer une classe abstraite Shape qui possède les attributs perimetre et surface, et les
méthodes abstraites calculerPerimetre() et calculerSurface().
2. Créer la classe Circle qui hérite de la classe Shape. Cette classe possède les attributs
rayon et centre (le centre est un point, réutiliser la classe Point de l’exercice
précédent). Définir les méthodes calculerPerimetre() et calculerSurface().
3. Créer la classe Rectangle qui hérite de la classe Shape et qui possèdent comme
attributs 4 points A, B, C et D. Ajouter les méthodes calculerLongueur() qui calcule la
distance entre A et B et calculerLargeur() qui calcule la distance entre A et C. au
niveau du constructeur, vérifier que les points constituent deux droites orthogonales
(utilisez les équations des droites) sinon assurez-vous d’attribuer des coordonnées à D
qui permettent de faire de l’objet un rectangle. Définir les méthodes
calculerPerimetre() et calculerSurface().
4. Créer la classe Carre qui hérite de la classe Rectangle. Au niveau du constructeur,
assurez-vous que la longueur et largeur sont égales.
5.5 Exercice 4
1. Créer une classe abstraite Animal qui possède les attributs : poids et couleur ; et les
méthodes abstraites depalcer() et crier().
2. Créer une classe abstraite AnimalDomestique. Ajouter un attribut dateNaissance et un
attribut vaccins de type tableau de dates. Ajouter une méthode getAge() qui renvoie
l’âge de l’animal en faisant soustraction entre la date d’aujourd’hui et la date de
naissance.
3. Créer une classe Chien qui hérite de la classe AnimalDomestique. La méthode
deplacer() affiche « je marche sur 4 pattes » et crier() affiche « j’aboie ».
4. Créer une classe Chat qui hérite de la classe AnimalDomestique. La méthode
deplacer() affiche « je marche sur 4 pattes » et crier() affiche « je miaule ».
6 Série 6
6.1 Objectifs
L’objectif de ce TP est de vous faire travailler avec les références et le clonage.
6.2 Exercice 1
1. Faites les tests et répondre aux questions suivantes
3. Tester le clonage
6.3 Exercice 2
Cet exercice est surtout une petite réflexion sur la notion de duplication ou clonage d’objets,
surtout quand il s’agit d’objets qui ont pour membres d’autres objets (ce qui est le cas de la
majorité).
Vous devez disposer d’une classe Point, même très simple (par exemple, celle du début de
l’exercice précédent). Assurez-vous que cette classe n’a pas de constructeur sans arguments.
A. Un rectangle est déterminé par la donnée de deux points, respectivement son angle
supérieur gauche et son angle inférieur droit. Définissez une classe Rectangle ayant deux
variables d’instance privées coinNO (pour « coin Nord-Ouest ») et coinSE (pour « coin Sud-
Est ») et, au moins, les méthodes suivantes :
• Rectangle(double x0, double y0, double x1, double y1), constructeur d’un rectangle
ayant (x0,y0) et (x1,y1) pour coins,
• String toString(), qui renvoie une expression du rectangle sous forme de texte,
comme "[(1.0,2.0);(3.0,4.0)]",
r2 = r1;
r1.coinSE.homothetie(2);
Si on pensait que l’expression « r2 = r1; » affectait à r2 une duplication de r1, qu’est-ce que
l’exécution du code précédent démontre ?
r2 = (Rectangle) r1.clone();
Votre classe utilise donc maintenant la version prédéfinie de la méthode clone. Reexécutez le
test : qu’est-ce que vous constatez ?
D. Ajoutez à votre classe la méthode suivante (vous pouvez effacer ou non les déclarations
« implements » :
6.4 Exercice 3
Vous travaillez chez Bobard & Co., fabriquant exclusif du sirop Mirifik, un élixir issu de la
recherche spatiale qui rend jeune, beau et intelligent et qui empêche la chute des cheveux et
les tâches de transpiration. Dilué à différentes concentrations, le sirop Mirifik est
commercialisé dans diverses sortes de flacons.
On vous demande d’écrire une classe Flacon dont les instances représentent les flacons de
sirop Mirifik en stock. Cette classe comportera :
o private float volume – le volume de liquide (en ml) que le flacon contient à un
instant donné,
• des méthodes :
Écrivez également une méthode main pour tester toutes ces opérations.
Que pensez-vous des qualifieurs que nous avons appliqué aux variables d’instance ?
Pourquoi capacite a été qualifiée final ? Est-il intéressant de qualifier private le volume et
la concentration ?
N.B. Comme à l’exercice précédent, pour abandonner le programme vous pouvez appeler la
méthode System.exit(code).
7 Série 7
7.1 Objectifs
L’objectif de ce TP est de travailler avec les flux et les fichiers en Java.
7.2 Exercice 1
Écrire un programme permettant de créer séquentiellement un fichier binaire comportant pour
différentes personnes les informations suivantes : nom, prénom et année de naissance.
Le dialogue de saisie de l’information s’effectuera en fenêtre console comme dans cet exemple
:
1. Les informations relatives au nom et au prénom seront conservées dans le fichier sous la
forme d’une suite de 20 caractères (comportant d’éventuels espaces à la fin).
2. Ces mêmes informations seront conservées sous la forme d’une chaîne codée dans le format
UTF (Ce format (Unicode Text Format) permet de coder une chaîne sous forme d’une suite
d’octets en nombre variable (chaque caractère étant codé sur un à trois octets). La méthode
writeUTF de la classe DataOutputStream réalise cette transformation d’une chaîne en une suite
de caractères UTF) ; aucune contrainte ne portera sur leur longueur.
7.3 Exercice 2
Réaliser un programme permettant de consulter un fichier du type de celui créé par la
première solution à l’exercice 1.
7.4 Exercice 3
Écrire un programme qui liste en fenêtre console le contenu d’un fichier texte en numérotant
les lignes. On prévoira 4 caractères pour l’affichage du numéro de ligne. Les lignes de plus de
60 caractères seront affichées sur plusieurs lignes d’écran comme dans cet exemple :
Exemple :
7.7 Exercice 6
On s'intéresse à noter dans un fichier une suite de scores sous la forme d'une suite de lignes ;
chaque ligne contient un nom et un entier ; l'entier représente un score obtenu par la personne
dont le nom est indiqué. On aura par exemple :
irene 12
olivier 8
david 19
Il s'agit de réaliser un programme qui permette de prendre à partir de l'entrée standard des
lignes constituées d'un nom et d'un score pour actualiser le fichier.
• Si le nom n'existait pas, une nouvelle ligne est créée pour mettre ce nouveau nom et
son score.
• Si le nom existait déjà, le score est actualisé.
Dans une même exécution du programme, l'utilisateur pourra entrer successivement plusieurs
lignes comportant chacune nom et score. Il terminera en retournant une ligne blanche.
Après chaque ajout ou modification de score, le fichier sera actualisé et son contenu sera
affiché.
L'utilisateur indiquera sur la ligne de commande le nom du fichier utilisé. Si le fichier
n'existait pas, il serait alors créé.
On conseille de créer une classe, nommée par exemple Joueur contenant deux attributs : un
pour un nom (chaîne de caractères), un pour un score(entier) et d'écrire dans le fichier
directement les instances de Joueur, comme des Object(s) ; bien entendu, on lira alors dans le
fichier des Object(s). Dans ce cas, on ne pourra pas lire le fichier directement, visuellement,
en l'ouvrant.
7.8 Exercice 7
1. Reprendre l’exercice 1 de la série 4, et rendre la classe Personne sérialisable.
2. Ajouter la fonction equal(Object) dans la classe Etudiant.
3. Ecrire un programme principal permettant de déclarer un employé em, un étudiant e et
un professeur p.
4. Améliorer le programme pour permettre de lire le nom de 3 fichiers chacun pour la
sérialisation de l’étudiant, de l’employé et du professeur.
5. Déclarer 3 autres objets em1, e1 et p1 de types Employe, Etudiant et Professeur pour y
désérialiser les 3 objets précédemment sérialisés.
6. Modifier dans e. Resérialiser le et désérialiser le dans un autre objet e2, puis comparer
e1 avec e2.
8 Série 8
8.1 Objectifs
L’objectif de cette série est de travailler avec les collections et les itérateurs tout en explorant
le tri sur les collections.
8.2 Exercice 1
1. Quels résultats fournira ce programme :
import java.util.*;
public class Essai{
public static void main (String args[]){
LinkedList<Integer> liste = new LinkedList <Integer> () ;
liste.add (3) ; liste.add (5) ; nliste.add (3) ;
liste.add (12) ;nliste.add (3) ;
System.out.println (liste) ;
liste.remove (3) ; System.out.println (liste) ;
liste.remove (new Integer(3)) ; System.out.println (liste) ;
Iterator <Integer> it = liste.iterator () ;
while (it.hasNext()) if (it.next()==3) it.remove() ;
System.out.println (liste) ;
}
}
2. RappelonsOn dispose d’un objet tab déclaré ainsi :
2. Modifier la classe Cercle, de manière à ce que l’appel (liste étant un objet de type
ArrayList<Cercle>) :
Collections.sort (liste) ;
3. Trier les éléments de liste, suivant les valeurs croissantes de leur rayon.
8.4 Exercice 3
Réaliser une classe nommée Index permettant de gérer un index d’ouvrage. Un tel index
associe une entrée (mot ou suite de mots) à un ou plusieurs numéros de page (contrairement à
ce qui se passe dans les index de la plupart des ouvrages, on ne prévoira pas d’entrées à
plusieurs niveaux).
La classe Index disposera, en plus d’un constructeur, des méthodes :
• ajouter pour introduire une nouvelle entrée, associée à un numéro de page ;
• liste pour afficher la liste de l’index, par ordre alphabétique des entrées, la liste des
numéros de page d’une même entrée étant triée par valeur croissante ; l’affichage
d’une entrée d’index se présentera sur une même ligne sous la forme :
Java : 12 25
On prendra bien soin de n’associer qu’une seule fois un même numéro de page à une entrée
donnée.
9 Série 9
9.1 Exercice
1. Ecrivez une application qui permet à l’utilisateur d’afficher soit un cercle soit un
rectangle de taille fixe. L’utilisateur va d’abord sélectionner « cercle » ou « rectangle »
en utilisant un JcomboBox. Le cercle ou rectangle sera affiché quand l’utilisateur
presse un bouton de la souris. Le cercle ou rectangle sera affiché à l’endroit où se
trouve le curseur au moment du click.
2. Modifiez votre application pour permettre l’utilisateur de choisir le diamètre de son
cercle ou la largeur et la hauteur de son rectangle. Utilisez un JtextField a cet effet. Si
l’utilisateur demande un cercle ou un rectangle qui dépasse la taille de la fenêtre,
l’avertir en ouvrant une boite de dialogue. Permettre aussi à l’utilisateur de choisir la
couleur de l’objet : bleu, rouge ou jaune.
3. Modifiez votre application pour permettre l’utilisateur de créer quelques cercles et
rectangles et de les déplacer. Pour choisir l’objet à déplacer l’utilisateur met le curseur
sur l’objet et presse un bouton de la souris. Il garde le bouton pressé pendant qu’il
déplace la souris. L’objet sera affiché à l’endroit ou se trouve le curseur au moment ou
l’utilisateur lâche le bouton. Notons qu’il faut stocker les objets (dans un ArrayList) au
moment où ils sont créés pour pouvoir les sectionner plus tard. 4. Ajoutez un bouton
pour rafraîchir l’image et un bouton pour tout effacer.
10 Série 10
10.1 Objectifs :
Au cours de ce TP, nous allons introduire l’outil de développement, nommé Eclipse, puis
comment se servir du terminal sur une machine Linux ou Mac, puis introduire Git, le système
de gestion des versions.
Une fois la fenêtre d’Eclipse apparue, identifier le panneau nommé Explorateur de packages
représentés ci-dessous.
Faire un click droit à l’intérieur de l’Explorateur de packages. Dans le menu qui apparaît, voir
ci-dessous, emmener la souris sur Nouveau puis choisir Autre… lorsque le second menu
apparaît.
Une fenêtre apparaît, voir ci-dessous, qui vous demande de sélectionner un type de projet. En
effet, Eclipse est polyvalent et permet l’édition de différents types de projets dans différents
langages. Cliquer sur Projet Java puis sur le bouton Suivant.
Une nouvelle fenêtre apparaît, voir ci-dessous, qui vous demande d’entrer le nom du projet.
Ecrire tp01 dans le champ Nom du projet. Ne pas modifier les autres options. Cliquer sur le
bouton Terminer.
Le projet créé, tp01, apparaît dans le panneau Explorateur de packages, voir ci-dessous.
Cliquer sur le petit triangle (▶) à gauche du nom du projet. Le triangle se tourne vers le bas
(▼) et le contenu du projet est dévoilé, voir ci-dessous.
On voit apparaître le dossier src (abréviation de source) destiné à recevoir vos programmes
ainsi que le dossier Bibliothèque système JRE qui contient l’ensemble des bibliohèques que
Java met à votre disposition. En cliquant sur le triangle (▶)à gauche du dossier Bibliothèque
système JRE, on voit apparaître la liste de ces bibliothèques. Voir ci-dessous.
Ces bibiothèques sont des ensembles de programmes, les classes prédéfinies, que Java met à
votre disposition. Nous en étudirons certaines en cours. En cliquant sur le triangle (▼)à
gauche du dossier Bibliothèque système JRE, on referme ce dossier.
10.3 Classe
Nous allons créer une classe. Pour cela, click droit sur le dossier src. Un menu apparaît,
amener la souris sur Nouveau. Un sous-menu apparaît, amener la souris sur Classe et cliquer.
Dans le champ Nom, écrire HelloWorld. Sélectionner la boîte (checkbox) devant public static
void main(String[] args). Cliquer sur le bouton Terminer.
Dans cette classe, ce qui se situe entre /** et */ et ce qui se situe entre un // et la fin de la ligne
sont des zones dédiées à l’écriture de commentaires. Ces zones de commentaires ont été
générées par Eclipse. Une méthode telle que la méthode main est celle qui sera exécutée au
lancement du programme. Cette méthode main a été générée par Eclipse. Elle est vide. Dans
son corps, écrire l’instruction suivante :
Vous obtenez :
Cette instruction a pour fonction d’écrire la chaîne de caractères Hello World ! dans ce que
l’on appelle la Console. Pour exécuter ce programme, cliquer sur le bouton rond vert avec un
triangle blanc à l’intérieur. Ce bouton se situe dans la barre de menu.
Eclipse compile alors votre programme. Cela se fait très rapidement. Puis il en lance
l’exécution. La méthode main de votre class HelloWorld est exécutée. Le panneau Console
apparaît en bas de votre fenêtre Eclipse. On y voir le résultat de l’instruction d’écriture.
L’exécution est aussitôt terminée.
10.4 Exercice 1
Décomposez l'algorithme d'Euclide pour le cacul du PGCD selon le principe de la
programmation structurée (une seule structure à chaque décomposition).
10.5 Exercice 2
1. Ecrivez un programme Java qui affiche la valeur de n! pour un n entré au clavier par
l'utilisateur au début du programme.
Donnez 2 versions itératives (avec une répétition "tant que", puis "for").
Testez pour n = 0, n = 1 et n = 3.