0% ont trouvé ce document utile (0 vote)
42 vues14 pages

ClassesEtObjetsJava ExercicesEtSolutions

Transféré par

Adn AG
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
42 vues14 pages

ClassesEtObjetsJava ExercicesEtSolutions

Transféré par

Adn AG
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 14

Les classes et les objets en Java

INF1120 - Programmation I

EXERCICES

Mélanie Lord
UQAM
INF1120 – Programmation I
Exercices sur les classes et les objets en Java

Table des matières

1. EXERCICES 3
1.1. DESSIN DE L'ÉTAT DE LA MÉMOIRE 3
1.2. CONCEPTION ET UTILISATION DE CLASSES 7

2. SOLUTIONS DES EXERCICES 10


2.1 SOLUTIONS DES EXERCICES DE LA SECTION 1.1 10
2.2 SOLUTIONS DES EXERCICES DE LA SECTION 1.2 11

[Link]@[Link] 2
INF1120 – Programmation I
Exercices sur les classes et les objets en Java

1. Exercices
1.1. Dessin de l'état de la mémoire

Exercice 1

Soit la classe Date suivante :

public class Date {

//CONSTANTES DE CLASSE
public static final int ANNEE_MIN = 1900; //annee min valide
public static final int ANNEE_MAX = 2015; //annee max valide
public static final int MOIS_MIN = 1; //mois min valide
public static final int MOIS_MAX = 12; //mois max valide
public static final int JOUR_MIN = 1; //jour min valide
public static final int JOUR_MAX = 31; //jour max valide

//ATTRIBUTS (VARIABLES D'INSTANCE)


private int annee = 2000; //l'annee de cette date
private int mois = 1; //le mois de cette date
private int jour = 1; //le jour de cette date

public Date() {
//vide
}

public Date(int annee, int mois, int jour) {


[Link] = annee;
[Link] = mois;
[Link] = jour;
}

public int getAnnee() {


return annee;
}

public int getMois() {


return mois;
}

public int getJour() {


return jour;
}

public void setAnnee(int annee) {


[Link] = annee;
}

public void setMois(int mois) {


[Link] = mois;
}

//Suite page suivante

[Link]@[Link] 3
INF1120 – Programmation I
Exercices sur les classes et les objets en Java

public void setJour(int jour) {


[Link] = jour;
}

public boolean estBissex() {


return (annee % 400 == 0)
|| (annee % 4 == 0 && annee % 100 != 0);
}

public String formater() {


String sJour = [Link](jour);
String sMois = [Link](mois);

if (jour > 0 && jour <= 9) {


sJour = "0" + jour;
}
if (mois > 0 && mois <= 9) {
sMois = "0" + mois;
}
return sJour + "/" + sMois + "/" + annee;
}

public boolean estDateValide() {


return annee >= ANNEE_MIN && annee <= ANNEE_MAX
&& mois >= MOIS_MIN && mois <= MOIS_MAX
&& jourValide();
}

private boolean jourValide() {


boolean valide = jour >= JOUR_MIN;

if (valide) {

if (mois == 1 || mois == 3 || mois == 5 || mois == 7


|| mois == 8 || mois == 10 || mois == 12) {
valide = jour <= JOUR_MAX;

} else if (mois == 2) {
valide = (estBissex() && jour <= JOUR_MAX - 2)
|| (jour <= JOUR_MAX - 3);
} else {
valide = jour <= JOUR_MAX - 1;
}
}
return valide;
}

} //Fin classe Date

[Link]@[Link] 4
INF1120 – Programmation I
Exercices sur les classes et les objets en Java

Étant donné la classe Date ci-dessus, dessinez l’état de la mémoire pour les variables
d1, d2, d3, d4, d5 et d6 après l’exécution des instructions suivantes.
Date d1 = new Date(2000, 11, 24);
Date d2 = new Date(2003, 2, 12);
Date d3 = new Date(1990, 8, 18);
Date d4 = new Date(1943, 10, 5);
Date d5 = new Date();
Date d6 = null;

[Link]([Link]());
d6 = d2;
[Link](1);
[Link](9);
[Link]([Link]());
d2 = d5;
[Link](1);
[Link](12);
d1 = d3;

if (![Link]()) {
d2 = null;
}

Exercice 2

Soit la classe Employe suivante :

public class Employe {

//ATTRIBUT DE CLASSE
private static int dernierNumero = 0; //le dernier numero d'employe
//attribue
//ATTRIBUTS D'INSTANCE
private String nom; //le nom de cet employe
private String prenom; //le prenom de cet employe
private int numero; //le numero (id unique) de cet employe
private int nbrAnnees; //le nbr d'annees d'anciennete de cet
//employe
private double salaire; //le salaire annuel de cet employe

public Employe(String nom, String prenom, int nbrAnnees,


double salaire) {
[Link] = nom;
[Link] = prenom;
[Link] = nbrAnnees;
[Link] = salaire;
dernierNumero = dernierNumero + 1;
numero = dernierNumero;
}

public String getNom() {


return nom;
}

//Suite page suivante

[Link]@[Link] 5
INF1120 – Programmation I
Exercices sur les classes et les objets en Java

public String getPrenom() {


return prenom;
}

public int getNumero() {


return numero;
}

public int getNbrAnnees() {


return nbrAnnees;
}

public double getSalaire() {


return salaire;
}

public void setNom(String nom) {


[Link] = nom;
}

public void setPrenom(String prenom) {


[Link] = prenom;
}

public void setNbrAnnees(int nbrAnnees) {


[Link] = nbrAnnees;
}

public void setSalaire(double salaire) {


[Link] = salaire;
}

public String toString() {


String s;
s = nom + ", " + prenom + " [" + numero + "]\n";
s = s + "Anciennete : " + nbrAnnees + " annee(s)\n";
s = s + "Salaire : " + salaire + "$";
return s;
}

public boolean estEgalA (Employe autreEmploye) {


return [Link]([Link])
&& [Link]([Link]);
}

public static int dernierNumero() {


return dernierNumero;
}

} //Fin de la classe Employe

Étant donné la classe Employe ci-dessus, dessinez l’état de la mémoire pour les
variables e1, e2, e3, et e4 après l’exécution des instructions suivantes.

Employe e1 = new Employe("Mill", "Sarah", 4, 44000);


Employe e2 = new Employe("Morin", "Gus", 10, 63000);

[Link]@[Link] 6
INF1120 – Programmation I
Exercices sur les classes et les objets en Java

Employe e3 = new Employe("Lavoie", "Luc", 1, 36000);


Employe e4;

[Link]([Link]() + 2);
[Link]([Link]() + 2000);
e4 = e3;
[Link](43500);
e3 = new Employe("Doe", "Jane", 2, 40000);
e2 = e1;
[Link]("Millet");
e1 = e3;
if ([Link]() == [Link]()) {
[Link]([Link]());
}

1.2. Conception et utilisation de classes


Exercice 1

Vous devez concevoir une classe nommée Tirelire qui modélise une tirelire pouvant
contenir des pièces de 25 cents, 10 cents, 5 cents et 1 cent selon les spécifications
suivantes :

Attributs d’instance :
- le nombre de pièces de 25 cents (type int)
- le nombre de pièces de 10 cents (type int)
- le nombre de pièces de 5 cents (type int)
- le nombre de pièces de 1 cent (type int)

Constructeurs :
Vous devez concevoir deux constructeurs :
1. Un constructeur sans paramètre qui initialise tous les attributs d’instance avec la
valeur 0.
2. Un constructeur qui prend 4 paramètres (nombre 25 cents, nombre 10 cents,
nombre 5 cents, et nombre 1 cent), et qui initialise les attributs d’instance avec
les valeurs reçues en paramètres.

Accesseurs (getters) et Modificateurs (setters) :


Écrivez les getters et setters pour chacun des attributs d’instance.
Autres méthodes publiques :
Ajoutez la méthode montantTotalEnCents qui ne prend aucun paramètre, et qui
retourne le montant total (int) dans cette tirelire, en cents.

Ajoutez la méthode montantTotalEnDollars qui ne prend aucun paramètre, et qui


retourne le montant total (double) dans cette tirelire, en dollars.

Note : vous devez respecter le principe d’encapsulation.

[Link]@[Link] 7
INF1120 – Programmation I
Exercices sur les classes et les objets en Java

Exercice 2
Dans une classe nommée GererTirelire, écrivez un programme (une méthode main
+ autres méthodes static) qui affiche un menu de différentes options pour gérer le
nombre de pièces de chaque type, dans une tirelire. Évidemment, vous devez utiliser la
classe Tirelire que vous avez conçue à l’exercice précédent.

Le programme commence en affichant le menu de 7 options suivant :


-----
Menu
-----
1. Modifier le nombre de 25 cents
2. Modifier le nombre de 10 cents
3. Modifier le nombre de 5 cents
4. Modifier le nombre de 1 cent
5. Calculer le montant total en sous
6. Calculer le montant total en dollars
7. Quitter

Les options 1 à 4 demandent à l’utilisateur d’entrer le nombre de pièces de la sorte


choisie (25, 10, 5 ou 1), et le programme modifie ensuite le nombre de cette sorte de
pièce dans la tirelire, par le nombre entré par l’utilisateur. Les options 5 et 6 affichent le
montant total dans la tirelire respectivement en sous, et en dollars. L’option 7 permet de
quitter le programme.

Note : pour cet exercice, vous n’avez pas à valider les saisies du nombre de
pièces pour les options 1 à 4.

Voici un exemple d’exécution :


-----
Menu
-----
1. Modifier le nombre de 25 cents
2. Modifier le nombre de 10 cents
3. Modifier le nombre de 5 cents
4. Modifier le nombre de 1 cent
5. Calculer le montant total en sous
6. Calculer le montant total en dollars
7. Quitter

Choisir une option au menu : d

Choississez une option du menu!


Appuyez sur <Entree> pour continuer...

-----
Menu
-----
1. Modifier le nombre de 25 cents
2. Modifier le nombre de 10 cents
3. Modifier le nombre de 5 cents
4. Modifier le nombre de 1 cent
5. Calculer le montant total en sous
6. Calculer le montant total en dollars
7. Quitter

Choisir une option au menu : 1


Entrez le nombre de 25 cents : 4
-----

[Link]@[Link] 8
INF1120 – Programmation I
Exercices sur les classes et les objets en Java

Menu
-----
1. Modifier le nombre de 25 cents
2. Modifier le nombre de 10 cents
3. Modifier le nombre de 5 cents
4. Modifier le nombre de 1 cent
5. Calculer le montant total en sous
6. Calculer le montant total en dollars
7. Quitter

Choisir une option au menu : 2


Entrez le nombre de 10 cents : 4

-----
Menu
-----
1. Modifier le nombre de 25 cents
2. Modifier le nombre de 10 cents
3. Modifier le nombre de 5 cents
4. Modifier le nombre de 1 cent
5. Calculer le montant total en sous
6. Calculer le montant total en dollars
7. Quitter

Choisir une option au menu : 3


Entrez le nombre de 5 cents : 4

-----
Menu
-----
1. Modifier le nombre de 25 cents
2. Modifier le nombre de 10 cents
3. Modifier le nombre de 5 cents
4. Modifier le nombre de 1 cent
5. Calculer le montant total en sous
6. Calculer le montant total en dollars
7. Quitter

Choisir une option au menu : 5

Le montant total en sous : 160 cent(s)


Appuyez sur <Entree> pour continuer...

-----
Menu
-----
1. Modifier le nombre de 25 cents
2. Modifier le nombre de 10 cents
3. Modifier le nombre de 5 cents
4. Modifier le nombre de 1 cent
5. Calculer le montant total en sous
6. Calculer le montant total en dollars
7. Quitter

Choisir une option au menu : 4


Entrez le nombre de 1 cents : 133

-----
Menu
-----
1. Modifier le nombre de 25 cents
2. Modifier le nombre de 10 cents
3. Modifier le nombre de 5 cents
4. Modifier le nombre de 1 cent
5. Calculer le montant total en sous
6. Calculer le montant total en dollars
7. Quitter

Choisir une option au menu : 6


Le montant total en dollars : 2.93 $
Appuyez sur <Entree> pour continuer...

[Link]@[Link] 9
INF1120 – Programmation I
Exercices sur les classes et les objets en Java

-----
Menu
-----
1. Modifier le nombre de 25 cents
2. Modifier le nombre de 10 cents
3. Modifier le nombre de 5 cents
4. Modifier le nombre de 1 cent
5. Calculer le montant total en sous
6. Calculer le montant total en dollars
7. Quitter

Choisir une option au menu : 7

FIN NORMALE DU PROGRAMME

2. Solutions des exercices


2.1 Solutions des exercices de la section 1.1

Exercice 1

Exercice 2

[Link]@[Link] 10
INF1120 – Programmation I
Exercices sur les classes et les objets en Java

2.2 Solutions des exercices de la section 1.2


Exercice 1
/**
* Cette classe modelise une tirelire qui peut contenir des pieces de 25 cents,
* de 10 cents, de 5 cents et de 1 cent.
* @author Melanie Lord
* @version novembre 2015
*/
public class Tirelire {
private int nombre25; //nombre de 25 cents
private int nombre10; //nombre de 10 cents
private int nombre5; //nombre de 5 cents
private int nombre1; //nombre de 1 cent

/**
* Constructeur d'initialisation. Construit une tirelire qui contient
* zero 25 cents, zero 10 cents, zero 5 cents et zero 1 cent.
*/
public Tirelire() {
nombre25 = 0;
nombre10 = 0;
nombre5 = 0;
nombre1 = 0;
}

/**
* Constructeur d'initialisation. Construit une tirelire contenant nb25
* 25 cents, nb10 10 cents, nb5 5 cents et nb1 1 cent.
* @param nb25 le nombre de 25 cents dans cette tirelire.
* @param nb10 le nombre de 10 cents dans cette tirelire.
* @param nb5 le nombre de 5 cents dans cette tirelire.
* @param nb1 le nombre de 1 cent dans cette tirelire.
*/
public Tirelire(int nb25, int nb10, int nb5, int nb1) {
nombre25 = nb25;
nombre10 = nb10;
nombre5 = nb5;
nombre1 = nb1;
}

/**
* Permet d'obtenir le nombre de 25 cents dans cette tirelire.
* @return le nombre de 25 cents dans cet objet Tirelire.
*/
public int getNombre25() {
return nombre25;
}

/**
* Permet d'obtenir le nombre de 10 cents dans cette tirelire.
* @return le nombre de 10 cents dans cet objet Tirelire.
*/
public int getNombre10() {
return nombre10;
}

[Link]@[Link] 11
INF1120 – Programmation I
Exercices sur les classes et les objets en Java

/**
* Permet d'obtenir le nombre de 5 cents dans cette tirelire.
* @return le nombre de 5 cents dans cet objet Tirelire.
*/
public int getNombre5() {
return nombre5;
}

/**
* Permet d'obtenir le nombre de 1 cent dans cette tirelire.
* @return le nombre de 1 cent dans cet objet Tirelire.
*/
public int getNombre1() {
return nombre1;
}

/**
* Modifie le nombre de 25 cents par la valeur donnee en parametre.
* @param nb25 le nouveau nombre de 25 cents.
*/
public void setNombre25(int nb25) {
nombre25 = nb25;
}

/**
* Modifie le nombre de 10 cents par la valeur donnee en parametre.
* @param nb10 le nouveau nombre de 10 cents.
*/
public void setNombre10(int nb10) {
nombre10 = nb10;
}

/**
* Modifie le nombre de 5 cents par la valeur donnee en parametre.
* @param nb5 le nouveau nombre de 5 cents.
*/
public void setNombre5(int nb5) {
nombre5 = nb5;
}

/**
* Modifie le nombre de 1 cent par la valeur donnee en parametre.
* @param nb1 le nouveau nombre de 1 cent.
*/
public void setNombre1(int nb1) {
nombre1 = nb1;
}

/**
* Permet d'obtenir le montant total dans cette tirelire, en cents.
* @return le montant total en cents
*/
public int montantTotalEnCents() {
return nombre25 * 25 + nombre10 * 10 + nombre5 * 5 + nombre1 * 1;
}

/**
* Permet d'obtenir le montant total dans cette tirelire, en dollars.
* @return le montant total en dollars.
*/
public double montantTotalEnDollars() {
return (double) montantTotalEnSous() / 100.0;
}
}

[Link]@[Link] 12
INF1120 – Programmation I
Exercices sur les classes et les objets en Java

Exercice 2
public class GererTirelire {

public static final String MSG_CHOIX_MENU =


"\nChoisir une option au menu : ";
public static final String MSG_ERR_CHOIX_MENU =
"\nChoississez une option du menu!";
public static final String MSG_NB25 = "Entrez le nombre de 25 cents : ";
public static final String MSG_NB10 = "Entrez le nombre de 10 cents : ";
public static final String MSG_NB5 = "Entrez le nombre de 5 cents : ";
public static final String MSG_NB1 = "Entrez le nombre de 1 cents : ";
public static final String MSG_ENTER =
"\nAppuyez sur <Entree> pour continuer...";
public static final String MSG_FIN =
"\n\nFIN NORMALE DU PROGRAMME";

public static void afficherMenu() {


[Link]("\n-----\nMenu\n-----"
+ "\n1. Modifier le nombre de 25 cents"
+ "\n2. Modifier le nombre de 10 cents"
+ "\n3. Modifier le nombre de 5 cents"
+ "\n4. Modifier le nombre de 1 cent"
+ "\n5. Calculer le montant total en sous"
+ "\n6. Calculer le montant total en dollars"
+ "\n7. Quitter");
}
public static int lireNombreDePieces (char noOption, String msg) {
int nombre;
[Link](msg);
nombre = [Link]();
return nombre;
}

public static void afficherMontantTotalEnSous (Tirelire tirelire) {


[Link]("\nLe montant total en sous : "
+ [Link]() + " cent(s)"
+ MSG_ENTER);
[Link]();
[Link]();
}

public static void afficherMontantTotalEnDollars (Tirelire tirelire) {


[Link]("\nLe montant total en dollars : "
+ [Link]() + " $"
+ MSG_ENTER);
[Link]();
[Link]();
}

public static void afficherErreurMenu () {


[Link](MSG_ERR_CHOIX_MENU + MSG_ENTER);
[Link]();
[Link]();
}

[Link]@[Link] 13
INF1120 – Programmation I
Exercices sur les classes et les objets en Java

public static void main(String[] args) {


char choixMenu;
boolean quitter = false;
int nombre;
Tirelire tirelire = new Tirelire(); //vide au debut

while (!quitter) {

afficherMenu();

[Link](MSG_CHOIX_MENU);
choixMenu = [Link]();

if (choixMenu == '1') {
nombre = lireNombreDePieces(choixMenu, MSG_NB25);
tirelire.setNombre25(nombre);

} else if (choixMenu == '2') {


nombre = lireNombreDePieces(choixMenu, MSG_NB10);
tirelire.setNombre10(nombre);

} else if (choixMenu == '3') {


nombre = lireNombreDePieces(choixMenu, MSG_NB5);
tirelire.setNombre5(nombre);

} else if (choixMenu == '4') {


nombre = lireNombreDePieces(choixMenu, MSG_NB1);
tirelire.setNombre1(nombre);

} else if (choixMenu == '5') {


afficherMontantTotalEnSous(tirelire);

} else if (choixMenu == '6') {


afficherMontantTotalEnDollars(tirelire);

} else if (choixMenu == '7') {


quitter = true;

} else {
afficherErreurMenu ();
}
}

[Link](MSG_FIN);
}
}

[Link]@[Link] 14

Vous aimerez peut-être aussi