SlideShare une entreprise Scribd logo
TD2 Java
Exercice n°1
1. Définir une classe Personne contenant deux attributs privés : nom et prenom. Munir cette classe d'un constructeur permettant
l'initialisation de ses attributs et de la méthode toString
public class Personne {
protected String nom , prenom;
Personne(){nom="";prenom="";}
Personne(String s, String s1){nom=s;prenom=s1;}
public String toString(){return (getClass().getName()+":"+nom+" "+prenom); } }
2. Définir une classe Etudiant héritant de Personne et disposant d'un attribut privé numInscription, de type entier. Ajouter un
constructeur qui permet de créer un étudiant à partir de son nom, son prénom et son numéro d'inscription et la méthode
toString()
class Etudiant extends Personne{
private int numInscription;
Etudiant(){super(); numInscription=0;}
Etudiant(String s, String s1, int e){super(s,s1); numInscription=e;}
public String toString(){return (getClass().getName()+":"+nom+" "+prenom+" "+numInscription); } }
3. Compléter la classe Etudiants qui gère un ensemble d'étudiants et
changer les classes Etudiant et Personne en cas de besoin
class Etudiants
{ // attributs
private Etudiant [] listeEtudiants;
private int nbEtudiants ;
//constructeur, reçoit en paramètre la capacité max du tableau listeEtudiants
Etudiants (int n){// … }
// ajoute un étudiant dans le tableau s’il n’existe pas déjà et si le tableau
//n’est pas plein
void ajouterEtudiant (Etudiant e) {//….}
// retourne l'étudiant ayant le numéro d'inscription passé en paramètre et
// null sinon
Etudiant rechercherEtudiant (int num) {//…. }
// affiche les informations sur tous le étudiants dans le tableau
void listerEtudiants (){//….}
}
class Etudiants
{// attributs
private Etudiant [] listeEtudiants;
private int nbEtudiants ;
// constructeur, reçoit en paramètre la capacité max du tableau listeEtudiants
Etudiants (int n)
{listeEtudiants=new Etudiant[n];
nbEtudiants=0;}
boolean exist(Etudiant e)
{for (int i=0; i< listeEtudiants.length; i++)
if (listeEtudiants[i]==e) return true;
return false;}
// ajoute un étudiant dans le tableau s’il n’existe pas déjà et si le tableau n’est
// pas plein
void ajouterEtudiant (Etudiant e)
{if ( ! exist(e) ) listeEtudiants[++nbEtudiants] = e; }
Etudiant rechercherEtudiant (int num) {
for (int i=0; i<=nbEtudiants; i++)
{if((listeEtudiants[i]!=null)&&(listeEtudiants[i].getnumInscription())==num)
return listeEtudiants[i];}
return null;}
4. Ecrire une classe Test contenant la méthode main et dans laquelle on testera les méthodes de la classe Etudiants
public class test{
public static void main(String[] args) {
Etudiant et= new Etudiant ("Ali","Mohamed", 4);
Etudiant et1= new Etudiant ("Salah","Mohamed", 3);
Etudiants E=new Etudiants(3);
E.ajouterEtudiant(et);
E.ajouterEtudiant(et1);
E.listerEtudiants();
System.out.println(E.rechercherEtudiant(4).toString());}}
Exercice n°2
Écrire les classes nécessaires au fonctionnement du programme
suivant, en ne fournissant que les méthodes nécessaires à ce
fonctionnement :
class TestMetiers {
public static void main(String [] args) {
Personne[] personnes = new Personne[4];
personnes[0] = new Personne("Salah");
personnes[1] = new Forgeron("Ali");
personnes[2] = new Menuisier("Mohamed");
personnes[3] = new Forgeron("Amor");
for (int i=0 ; i<personnes.length ; i++)
System.out.println (personnes[i]);}
}
Sortie de ce programme :
Je suis Salah
Je suis Ali le forgeron
Je suis Mohamed le menuisier
Je suis Amor le forgeron
Solution:
public class Personne {
protected String prenom;
Personne(String s){prenom=s; }
public String toString(){return ("Je suis "+prenom); } }
class Forgeron extends Personne {
Forgeron(String s){super(s); }
public String toString(){return ("Je suis "+prenom+" le forgeron");
}}
class Menuisier extends Personne {
Menuisier(String s){super(s);}
public String toString(){return ("Je suis "+prenom+" le menuisier");
}}
Exercice n°3
Qu’obtient- on sur écran à l’exécution du programme suivant ?
interface Son { void parle(); }
abstract class Mammifere implements Son
{// Attributs
String nom, son;
int age;
Mammifere(String nom, String son, int age) // constructeur
{this.nom = nom;
this.son = son;
this.age = age; }
public void parle() // Méthode parle affiche le son d'un mammifère
{ System.out.println(son+this);}
abstract void vitesse(); // Méthode abstraite vitesse
public String toString() // Méthode toString redéfinie
{ return(" mon nom est "+nom +" j'ai "+age+" ans");}
}
class Homme extends Mammifere
{// Attributs
boolean marie;
Homme(String nom, String son, int age, boolean marie) // Constructeur
{super(nom, son, age);
this.marie = marie; }
void vitesse() // Implémentation de la méthode vitesse
{System.out.println("Je cours à une vitesse de 20km/h");}
public String toString() // Méthode toString redéfinie
{if (marie) return(super.toString()+" je suis marie");
Else return(super.toString()+ " je suis célibataire");
}
} // fin Homme
class Chien extends Mammifere
{ // Attributs
String race;
Chien(String nom, String son, int age, String race) // Constructeur
{super(nom, son, age);
this.race = race;}
void vitesse() // Implémentation de la méthode vitesse
{System.out.println("Je cours à une vitesse de 30km/h");}
public String toString() // Méthode toString redéfinie
{return(super.toString()+" j'appartient à la race des "+race);}
}
class Test{
public static void main(String [] args) {
Son []listeSons = new Son[2];
Mammifere []listeMammiferes = new Mammifere[2];
Homme h = new Homme("Ali", "Bonjour", 20, true);
Chien ch = new Chien("Snoopy", "Wouah!", 2,"caniches");
listeSons[0] = h;
listeSons[1] = ch;
listeMammiferes[0] = h;
listeMammiferes[1] = ch;
for (int i=0; i<listeSons.length; i++)
{ // la méthode parle est polymorphe
listeSons[i].parle();
// la méthode vitesse est polymorphe
listeMammiferes[i].vitesse(); }
} // fin main
} // fin Test
Solution :
Bonjour mon nom est Ali j'ai 20 ans je suis marie
Je cours à une vitesse de 20km/h
Wouah! mon nom est Snoopy j'ai 2 ans j'appartient à la race des caniches
Je cours à une vitesse de 30km/h
La classe Robot modélise l'état et le comportement de robots virtuels. Chaque robot correspond à un objet qui
est une instance de cette classe. Chaque robot :
• a un nom (attribut nom : chaîne de caractères)
• a une position : donnée par les attributs entiers x et y, sachant que x augmente en allant vers l'Est et y
augmente en allant vers le Nord,
• a une direction : donnée par l'attribut direction qui prend une des valeurs "Nord", "Est", "Sud" ou "Ouest"
• peut avancer d'un pas en avant : avec la méthode sans paramètre avance()
• peut tourner à droite de 90° pour changer de direction (si sa direction était "Nord" elle devient "Est", si c'était
"Est" elle devient "Sud", etc.) : avec la méthode sans paramètre droite(). Les robots ne peuvent pas tourner à
gauche.
• peut afficher son état en détail (avec de simples System.out.println())
Le nom, la position et la direction d'un robot lui sont donnés au moment de sa création. Le nom est obligatoire
mais on peut ne pas spécifier la position et la direction, qui sont définis par défaut à (0,0) et "Est".
Exercice n°4
Travail à faire:
1) Écrire les instructions Java qui permettent de définir la classe Robot,
public class Robot
{ private String nom;
private int x;
private int y;
private String direction;
public Robot(String nom)
{ this.nom = nom;
x = y = 0;
direction = "Est"; }
public Robot(String nom, int x, int y, String direction)
{ this(nom);
this.x = x;
this.y = y;
if (direction.equals("Nord") || direction.equals("Sud")||
direction.equals("Ouest"))
this.direction = direction; // garder "Est" si direction invalide
}
/* avance d'un pas */
public void avance()
{ if (direction.equals("Nord")) y++;
else if (direction.equals("Est")) x++;
else if (direction.equals("Sud")) y--;
else // (direction.equals("Ouest")) x--; }
/* tourne à droite de 90° */
public void droite()
{ if (direction.equals("Nord"))
direction = "Est";
else if (direction.equals("Est"))
direction = "Sud";
else if (direction.equals("Sud"))
direction = "Ouest";
else // (direction.equals("Ouest"))
direction = "Nord";
}
/* affiche l'état du robot */
public void afficher()
{ System.out.println("nom : " + nom);
System.out.println("position : (" + x + "," + y +")");
System.out.println("direction : " + direction);
}
}
2) On veut améliorer ces robots en en créant une Nouvelle Génération, les RobotNG qui ne remplacent pas les anciens robots mais
peuvent cohabiter avec eux. Les RobotNG savent faire la même chose mais aussi :
• avancer de plusieurs pas en une seule fois grâce à une méthode avance() qui prend en paramètre le nombre de pas
• tourner à gauche de 90° grâce à la méthode gauche()
• faire demi-tour grâce à la méthode demiTour()
Écrire cette nouvelle classe en spécialisant celle de la première question, sans modifier celle-ci : les nouvelles méthodes appellent les
anciennes méthodes pour implémenter le nouveau comportement : avancer de n pas se fait en avançant de 1 pas n fois, « tourner à
gauche » se fait en tournant 3 fois à droite, faire demi-tour se fait en tournant 2 fois
class RobotNG extends Robot
{
public RobotNG(String nom)
{ super(nom); }
public RobotNG(String nom, int x, int y, String direction)
{ super(nom, x, y, direction); }
/**
* avance de plusieurs pas
* @param pas le nombre de pas
*/
public void avance(int pas)
{ for (int i = 0 ; i < pas ; ++i) {
avance(); }
}
/** * tourne à gauche de 90° */
public void gauche()
{
droite();
droite();
droite();
}
/** * fait demi-tour */
public void demiTour()
{
droite();
droite();
}
}

Contenu connexe

Similaire à correctionTD2JAVA.pdf

Librairies Java qui changent la vie
Librairies Java qui changent la vieLibrairies Java qui changent la vie
Librairies Java qui changent la vie
cluelessjoe
 
Correction md2 fabien orienté object
Correction md2 fabien orienté objectCorrection md2 fabien orienté object
Correction md2 fabien orienté objectyahyaoui hamdi
 
JAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVAJAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVA
Aymen Bedwivski
 
Java uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 javaJava uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 javaAmel Morchdi
 
16-Concurrence-APIs-Concurrentes.pdf
16-Concurrence-APIs-Concurrentes.pdf16-Concurrence-APIs-Concurrentes.pdf
16-Concurrence-APIs-Concurrentes.pdf
Patiento Del Mar
 
Deuxième partie.pptx
Deuxième partie.pptxDeuxième partie.pptx
Deuxième partie.pptx
SafaeLhr1
 
Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02
Rahma Boufalgha
 
Javascript mémo.pdf
Javascript  mémo.pdfJavascript  mémo.pdf
Javascript mémo.pdf
sofianePicanto
 
Chapitre 5 classes abstraites et interfaces
Chapitre 5  classes abstraites et interfacesChapitre 5  classes abstraites et interfaces
Chapitre 5 classes abstraites et interfaces
Amir Souissi
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
slimyaich3
 
Hibernate
HibernateHibernate
Hibernate
Maher Megadmini
 
De java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDe java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvements
Didier Plaindoux
 
Corrigé langage c
Corrigé langage cCorrigé langage c
Corrigé langage c
coursuniv
 
Corrigés exercices langage C
Corrigés exercices langage CCorrigés exercices langage C
Corrigés exercices langage C
coursuniv
 
Python avancé : Tuple et objet
Python avancé : Tuple et objetPython avancé : Tuple et objet
Python avancé : Tuple et objet
ECAM Brussels Engineering School
 
Classes et Objets.pdf
Classes et Objets.pdfClasses et Objets.pdf
Classes et Objets.pdf
AabidiHafid
 
Lect14 dev2
Lect14 dev2Lect14 dev2
Lect14 dev2moisko
 
POO-chapitre3.pptx
POO-chapitre3.pptxPOO-chapitre3.pptx
POO-chapitre3.pptx
ImaneLoukili7
 
ExJava.pdf
ExJava.pdfExJava.pdf
ExJava.pdf
OumaimaHm
 

Similaire à correctionTD2JAVA.pdf (20)

Librairies Java qui changent la vie
Librairies Java qui changent la vieLibrairies Java qui changent la vie
Librairies Java qui changent la vie
 
Correction md2 fabien orienté object
Correction md2 fabien orienté objectCorrection md2 fabien orienté object
Correction md2 fabien orienté object
 
JAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVAJAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVA
 
Java uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 javaJava uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 java
 
16-Concurrence-APIs-Concurrentes.pdf
16-Concurrence-APIs-Concurrentes.pdf16-Concurrence-APIs-Concurrentes.pdf
16-Concurrence-APIs-Concurrentes.pdf
 
Deuxième partie.pptx
Deuxième partie.pptxDeuxième partie.pptx
Deuxième partie.pptx
 
Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02
 
Javascript mémo.pdf
Javascript  mémo.pdfJavascript  mémo.pdf
Javascript mémo.pdf
 
Chapitre 5 classes abstraites et interfaces
Chapitre 5  classes abstraites et interfacesChapitre 5  classes abstraites et interfaces
Chapitre 5 classes abstraites et interfaces
 
Part1
Part1Part1
Part1
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
Hibernate
HibernateHibernate
Hibernate
 
De java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDe java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvements
 
Corrigé langage c
Corrigé langage cCorrigé langage c
Corrigé langage c
 
Corrigés exercices langage C
Corrigés exercices langage CCorrigés exercices langage C
Corrigés exercices langage C
 
Python avancé : Tuple et objet
Python avancé : Tuple et objetPython avancé : Tuple et objet
Python avancé : Tuple et objet
 
Classes et Objets.pdf
Classes et Objets.pdfClasses et Objets.pdf
Classes et Objets.pdf
 
Lect14 dev2
Lect14 dev2Lect14 dev2
Lect14 dev2
 
POO-chapitre3.pptx
POO-chapitre3.pptxPOO-chapitre3.pptx
POO-chapitre3.pptx
 
ExJava.pdf
ExJava.pdfExJava.pdf
ExJava.pdf
 

Plus de MbarkiIsraa

NP-complet.ppt
NP-complet.pptNP-complet.ppt
NP-complet.ppt
MbarkiIsraa
 
Format.pptx
Format.pptxFormat.pptx
Format.pptx
MbarkiIsraa
 
correctionTD-1-vhdl2947.pptx
correctionTD-1-vhdl2947.pptxcorrectionTD-1-vhdl2947.pptx
correctionTD-1-vhdl2947.pptx
MbarkiIsraa
 
PCD YasBas.pptx
PCD YasBas.pptxPCD YasBas.pptx
PCD YasBas.pptx
MbarkiIsraa
 
PLNE.pptx
PLNE.pptxPLNE.pptx
PLNE.pptx
MbarkiIsraa
 
Chapitre3_Partie1.pdf
Chapitre3_Partie1.pdfChapitre3_Partie1.pdf
Chapitre3_Partie1.pdf
MbarkiIsraa
 
Chapitre2_Partie1.pdf
Chapitre2_Partie1.pdfChapitre2_Partie1.pdf
Chapitre2_Partie1.pdf
MbarkiIsraa
 
(GLII-Spécification, vérification et qualité-chapitres 1 et 2-2013-2014.pdf
(GLII-Spécification, vérification et qualité-chapitres 1 et 2-2013-2014.pdf(GLII-Spécification, vérification et qualité-chapitres 1 et 2-2013-2014.pdf
(GLII-Spécification, vérification et qualité-chapitres 1 et 2-2013-2014.pdf
MbarkiIsraa
 
support_cours.pdf
support_cours.pdfsupport_cours.pdf
support_cours.pdf
MbarkiIsraa
 
c h02EspaceProbTr.pdf
c h02EspaceProbTr.pdfc h02EspaceProbTr.pdf
c h02EspaceProbTr.pdf
MbarkiIsraa
 
Ordonnanc-Proc_Threads (1).pdf
Ordonnanc-Proc_Threads (1).pdfOrdonnanc-Proc_Threads (1).pdf
Ordonnanc-Proc_Threads (1).pdf
MbarkiIsraa
 
prog_reg.pptx
prog_reg.pptxprog_reg.pptx
prog_reg.pptx
MbarkiIsraa
 
correctionTD-2-vhdl2949.pptx
correctionTD-2-vhdl2949.pptxcorrectionTD-2-vhdl2949.pptx
correctionTD-2-vhdl2949.pptx
MbarkiIsraa
 
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdf
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdfChapitre 3 _Conception et analyse d’algorithme-DPR.pdf
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdf
MbarkiIsraa
 
Chapitre 2 -Complexité des problèmes avec correction.pdf
Chapitre 2 -Complexité des problèmes avec correction.pdfChapitre 2 -Complexité des problèmes avec correction.pdf
Chapitre 2 -Complexité des problèmes avec correction.pdf
MbarkiIsraa
 
Complexité_ENSI_2011.ppt
Complexité_ENSI_2011.pptComplexité_ENSI_2011.ppt
Complexité_ENSI_2011.ppt
MbarkiIsraa
 
DiagrammeSequence&DiagrammaEtatTransition&DiagrammeActivité.pdf
DiagrammeSequence&DiagrammaEtatTransition&DiagrammeActivité.pdfDiagrammeSequence&DiagrammaEtatTransition&DiagrammeActivité.pdf
DiagrammeSequence&DiagrammaEtatTransition&DiagrammeActivité.pdf
MbarkiIsraa
 
Correction-TD1.pdf
Correction-TD1.pdfCorrection-TD1.pdf
Correction-TD1.pdf
MbarkiIsraa
 
UML.Objet.4pp.pdf
UML.Objet.4pp.pdfUML.Objet.4pp.pdf
UML.Objet.4pp.pdf
MbarkiIsraa
 

Plus de MbarkiIsraa (19)

NP-complet.ppt
NP-complet.pptNP-complet.ppt
NP-complet.ppt
 
Format.pptx
Format.pptxFormat.pptx
Format.pptx
 
correctionTD-1-vhdl2947.pptx
correctionTD-1-vhdl2947.pptxcorrectionTD-1-vhdl2947.pptx
correctionTD-1-vhdl2947.pptx
 
PCD YasBas.pptx
PCD YasBas.pptxPCD YasBas.pptx
PCD YasBas.pptx
 
PLNE.pptx
PLNE.pptxPLNE.pptx
PLNE.pptx
 
Chapitre3_Partie1.pdf
Chapitre3_Partie1.pdfChapitre3_Partie1.pdf
Chapitre3_Partie1.pdf
 
Chapitre2_Partie1.pdf
Chapitre2_Partie1.pdfChapitre2_Partie1.pdf
Chapitre2_Partie1.pdf
 
(GLII-Spécification, vérification et qualité-chapitres 1 et 2-2013-2014.pdf
(GLII-Spécification, vérification et qualité-chapitres 1 et 2-2013-2014.pdf(GLII-Spécification, vérification et qualité-chapitres 1 et 2-2013-2014.pdf
(GLII-Spécification, vérification et qualité-chapitres 1 et 2-2013-2014.pdf
 
support_cours.pdf
support_cours.pdfsupport_cours.pdf
support_cours.pdf
 
c h02EspaceProbTr.pdf
c h02EspaceProbTr.pdfc h02EspaceProbTr.pdf
c h02EspaceProbTr.pdf
 
Ordonnanc-Proc_Threads (1).pdf
Ordonnanc-Proc_Threads (1).pdfOrdonnanc-Proc_Threads (1).pdf
Ordonnanc-Proc_Threads (1).pdf
 
prog_reg.pptx
prog_reg.pptxprog_reg.pptx
prog_reg.pptx
 
correctionTD-2-vhdl2949.pptx
correctionTD-2-vhdl2949.pptxcorrectionTD-2-vhdl2949.pptx
correctionTD-2-vhdl2949.pptx
 
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdf
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdfChapitre 3 _Conception et analyse d’algorithme-DPR.pdf
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdf
 
Chapitre 2 -Complexité des problèmes avec correction.pdf
Chapitre 2 -Complexité des problèmes avec correction.pdfChapitre 2 -Complexité des problèmes avec correction.pdf
Chapitre 2 -Complexité des problèmes avec correction.pdf
 
Complexité_ENSI_2011.ppt
Complexité_ENSI_2011.pptComplexité_ENSI_2011.ppt
Complexité_ENSI_2011.ppt
 
DiagrammeSequence&DiagrammaEtatTransition&DiagrammeActivité.pdf
DiagrammeSequence&DiagrammaEtatTransition&DiagrammeActivité.pdfDiagrammeSequence&DiagrammaEtatTransition&DiagrammeActivité.pdf
DiagrammeSequence&DiagrammaEtatTransition&DiagrammeActivité.pdf
 
Correction-TD1.pdf
Correction-TD1.pdfCorrection-TD1.pdf
Correction-TD1.pdf
 
UML.Objet.4pp.pdf
UML.Objet.4pp.pdfUML.Objet.4pp.pdf
UML.Objet.4pp.pdf
 

correctionTD2JAVA.pdf

  • 2. Exercice n°1 1. Définir une classe Personne contenant deux attributs privés : nom et prenom. Munir cette classe d'un constructeur permettant l'initialisation de ses attributs et de la méthode toString public class Personne { protected String nom , prenom; Personne(){nom="";prenom="";} Personne(String s, String s1){nom=s;prenom=s1;} public String toString(){return (getClass().getName()+":"+nom+" "+prenom); } } 2. Définir une classe Etudiant héritant de Personne et disposant d'un attribut privé numInscription, de type entier. Ajouter un constructeur qui permet de créer un étudiant à partir de son nom, son prénom et son numéro d'inscription et la méthode toString() class Etudiant extends Personne{ private int numInscription; Etudiant(){super(); numInscription=0;} Etudiant(String s, String s1, int e){super(s,s1); numInscription=e;} public String toString(){return (getClass().getName()+":"+nom+" "+prenom+" "+numInscription); } }
  • 3. 3. Compléter la classe Etudiants qui gère un ensemble d'étudiants et changer les classes Etudiant et Personne en cas de besoin class Etudiants { // attributs private Etudiant [] listeEtudiants; private int nbEtudiants ; //constructeur, reçoit en paramètre la capacité max du tableau listeEtudiants Etudiants (int n){// … } // ajoute un étudiant dans le tableau s’il n’existe pas déjà et si le tableau //n’est pas plein void ajouterEtudiant (Etudiant e) {//….} // retourne l'étudiant ayant le numéro d'inscription passé en paramètre et // null sinon Etudiant rechercherEtudiant (int num) {//…. } // affiche les informations sur tous le étudiants dans le tableau void listerEtudiants (){//….} } class Etudiants {// attributs private Etudiant [] listeEtudiants; private int nbEtudiants ; // constructeur, reçoit en paramètre la capacité max du tableau listeEtudiants Etudiants (int n) {listeEtudiants=new Etudiant[n]; nbEtudiants=0;} boolean exist(Etudiant e) {for (int i=0; i< listeEtudiants.length; i++) if (listeEtudiants[i]==e) return true; return false;} // ajoute un étudiant dans le tableau s’il n’existe pas déjà et si le tableau n’est // pas plein void ajouterEtudiant (Etudiant e) {if ( ! exist(e) ) listeEtudiants[++nbEtudiants] = e; } Etudiant rechercherEtudiant (int num) { for (int i=0; i<=nbEtudiants; i++) {if((listeEtudiants[i]!=null)&&(listeEtudiants[i].getnumInscription())==num) return listeEtudiants[i];} return null;}
  • 4. 4. Ecrire une classe Test contenant la méthode main et dans laquelle on testera les méthodes de la classe Etudiants public class test{ public static void main(String[] args) { Etudiant et= new Etudiant ("Ali","Mohamed", 4); Etudiant et1= new Etudiant ("Salah","Mohamed", 3); Etudiants E=new Etudiants(3); E.ajouterEtudiant(et); E.ajouterEtudiant(et1); E.listerEtudiants(); System.out.println(E.rechercherEtudiant(4).toString());}}
  • 5. Exercice n°2 Écrire les classes nécessaires au fonctionnement du programme suivant, en ne fournissant que les méthodes nécessaires à ce fonctionnement : class TestMetiers { public static void main(String [] args) { Personne[] personnes = new Personne[4]; personnes[0] = new Personne("Salah"); personnes[1] = new Forgeron("Ali"); personnes[2] = new Menuisier("Mohamed"); personnes[3] = new Forgeron("Amor"); for (int i=0 ; i<personnes.length ; i++) System.out.println (personnes[i]);} } Sortie de ce programme : Je suis Salah Je suis Ali le forgeron Je suis Mohamed le menuisier Je suis Amor le forgeron Solution: public class Personne { protected String prenom; Personne(String s){prenom=s; } public String toString(){return ("Je suis "+prenom); } } class Forgeron extends Personne { Forgeron(String s){super(s); } public String toString(){return ("Je suis "+prenom+" le forgeron"); }} class Menuisier extends Personne { Menuisier(String s){super(s);} public String toString(){return ("Je suis "+prenom+" le menuisier"); }}
  • 6. Exercice n°3 Qu’obtient- on sur écran à l’exécution du programme suivant ? interface Son { void parle(); } abstract class Mammifere implements Son {// Attributs String nom, son; int age; Mammifere(String nom, String son, int age) // constructeur {this.nom = nom; this.son = son; this.age = age; } public void parle() // Méthode parle affiche le son d'un mammifère { System.out.println(son+this);} abstract void vitesse(); // Méthode abstraite vitesse public String toString() // Méthode toString redéfinie { return(" mon nom est "+nom +" j'ai "+age+" ans");} } class Homme extends Mammifere {// Attributs boolean marie; Homme(String nom, String son, int age, boolean marie) // Constructeur {super(nom, son, age); this.marie = marie; } void vitesse() // Implémentation de la méthode vitesse {System.out.println("Je cours à une vitesse de 20km/h");} public String toString() // Méthode toString redéfinie {if (marie) return(super.toString()+" je suis marie"); Else return(super.toString()+ " je suis célibataire"); } } // fin Homme class Chien extends Mammifere { // Attributs String race; Chien(String nom, String son, int age, String race) // Constructeur {super(nom, son, age); this.race = race;} void vitesse() // Implémentation de la méthode vitesse {System.out.println("Je cours à une vitesse de 30km/h");} public String toString() // Méthode toString redéfinie {return(super.toString()+" j'appartient à la race des "+race);} } class Test{ public static void main(String [] args) { Son []listeSons = new Son[2]; Mammifere []listeMammiferes = new Mammifere[2]; Homme h = new Homme("Ali", "Bonjour", 20, true); Chien ch = new Chien("Snoopy", "Wouah!", 2,"caniches"); listeSons[0] = h; listeSons[1] = ch; listeMammiferes[0] = h; listeMammiferes[1] = ch; for (int i=0; i<listeSons.length; i++) { // la méthode parle est polymorphe listeSons[i].parle(); // la méthode vitesse est polymorphe listeMammiferes[i].vitesse(); } } // fin main } // fin Test Solution : Bonjour mon nom est Ali j'ai 20 ans je suis marie Je cours à une vitesse de 20km/h Wouah! mon nom est Snoopy j'ai 2 ans j'appartient à la race des caniches Je cours à une vitesse de 30km/h
  • 7. La classe Robot modélise l'état et le comportement de robots virtuels. Chaque robot correspond à un objet qui est une instance de cette classe. Chaque robot : • a un nom (attribut nom : chaîne de caractères) • a une position : donnée par les attributs entiers x et y, sachant que x augmente en allant vers l'Est et y augmente en allant vers le Nord, • a une direction : donnée par l'attribut direction qui prend une des valeurs "Nord", "Est", "Sud" ou "Ouest" • peut avancer d'un pas en avant : avec la méthode sans paramètre avance() • peut tourner à droite de 90° pour changer de direction (si sa direction était "Nord" elle devient "Est", si c'était "Est" elle devient "Sud", etc.) : avec la méthode sans paramètre droite(). Les robots ne peuvent pas tourner à gauche. • peut afficher son état en détail (avec de simples System.out.println()) Le nom, la position et la direction d'un robot lui sont donnés au moment de sa création. Le nom est obligatoire mais on peut ne pas spécifier la position et la direction, qui sont définis par défaut à (0,0) et "Est". Exercice n°4
  • 8. Travail à faire: 1) Écrire les instructions Java qui permettent de définir la classe Robot, public class Robot { private String nom; private int x; private int y; private String direction; public Robot(String nom) { this.nom = nom; x = y = 0; direction = "Est"; } public Robot(String nom, int x, int y, String direction) { this(nom); this.x = x; this.y = y; if (direction.equals("Nord") || direction.equals("Sud")|| direction.equals("Ouest")) this.direction = direction; // garder "Est" si direction invalide } /* avance d'un pas */ public void avance() { if (direction.equals("Nord")) y++; else if (direction.equals("Est")) x++; else if (direction.equals("Sud")) y--; else // (direction.equals("Ouest")) x--; } /* tourne à droite de 90° */ public void droite() { if (direction.equals("Nord")) direction = "Est"; else if (direction.equals("Est")) direction = "Sud"; else if (direction.equals("Sud")) direction = "Ouest"; else // (direction.equals("Ouest")) direction = "Nord"; } /* affiche l'état du robot */ public void afficher() { System.out.println("nom : " + nom); System.out.println("position : (" + x + "," + y +")"); System.out.println("direction : " + direction); } }
  • 9. 2) On veut améliorer ces robots en en créant une Nouvelle Génération, les RobotNG qui ne remplacent pas les anciens robots mais peuvent cohabiter avec eux. Les RobotNG savent faire la même chose mais aussi : • avancer de plusieurs pas en une seule fois grâce à une méthode avance() qui prend en paramètre le nombre de pas • tourner à gauche de 90° grâce à la méthode gauche() • faire demi-tour grâce à la méthode demiTour() Écrire cette nouvelle classe en spécialisant celle de la première question, sans modifier celle-ci : les nouvelles méthodes appellent les anciennes méthodes pour implémenter le nouveau comportement : avancer de n pas se fait en avançant de 1 pas n fois, « tourner à gauche » se fait en tournant 3 fois à droite, faire demi-tour se fait en tournant 2 fois class RobotNG extends Robot { public RobotNG(String nom) { super(nom); } public RobotNG(String nom, int x, int y, String direction) { super(nom, x, y, direction); } /** * avance de plusieurs pas * @param pas le nombre de pas */ public void avance(int pas) { for (int i = 0 ; i < pas ; ++i) { avance(); } } /** * tourne à gauche de 90° */ public void gauche() { droite(); droite(); droite(); } /** * fait demi-tour */ public void demiTour() { droite(); droite(); } }