Travaux pratiques
147
l ments traditionnels de Java
nonc
1) diter, compiler et ex cuter tous les programmes du TD n 1 avec l'environnement de
d veloppement de Java dont vous disposez
2) Visualiser la documentation de Java
a) Visualiser lensemble des packages (ensembles de classes de bases organis es en fonction
de leur domaine dapplication)
b) Visualiser le package java.lang
Remarque g n rale pour tous les TP:
Pour pouvoir visualiser le r sultat dans Microsoft J++, il faut ajouter une saisie clavier. Pour
cela :
1) ajouter apr s la d claration de main : throws java.io.IOException
2) ajouter la derni re ligne de main l'instruction : System.in.read( );
public static void main (String [] args ) throws java.io.IOException
{
...
System.in.read( );
}
Vous comprendrez la signification plus tard dans le cours!
148
nonc
Objets, Classes
1- D finir la classe Date qui permet de repr senter le format de date suivant: 16/03/1998. Cette
classe doit
contenir les m thodes suivantes :
nombreJours : Donne le nombre de jours pour le mois d'une Date
dateValide : Permet de v rifier si une Date est valide.
lendemain : Donne la Date de demain
2- crire la m thode main dans une classe TesterDate qui :
a) cr e une date partir des valeurs jour, mois et ann e introduits partir de la ligne de commande
b) affiche cette date sous le format pr cis en haut
c) si la date est valide
- affiche le nombre de jours du mois de cette date
- affiche la date de demain
sinon
Remarques :
- affiche un message d'erreur
1- Respecter le principe de l'encapsulation en d clarant les attributs et les m thodes.
2- Compl ter la classe Date par d'autres m thodes si c'est n cessaire
Indication :
Pour transformer une cha ne de caract res s en un int que l'on affecte une variable enti re n on peut
crire :
n = Integer.parseInt(s);
parseInt est une m thode de la classe Integer (classe pr d finie dans l'API de Java)
149
Compl ments sur les objets et les classes
nonc
Fournissez la classe Point con ue de mani re ce que le programme suivant fonctionne
correctement:
class TestPoint
{
public static void main (String[ ] args)
{
Point p1 = new Point(1.0, 3.0); // Cr ation du point de coordonn es x=1 et y=3
Point p2 = new Point(5.0, 6.0); // Cr ation du point de coordonn es x=5 et y=6
double d = Point.distance(p1,p2);
p1.affiche (1); // affiche : p1 = (1.0 , 3.0)
p2.affiche (2); // affiche : p2 = (5.0 , 6.0)
// affiche: Distance entre p1 et p2
System.out.println( "\nDistance entre p1 et p2 = " + d);
}
}
Indications :
La distance entre deux points (x1,y1) et (x2,y2) est gale :
La classe pr d finie Math contient des m thodes static permettant de calculer la racine carr et la
puissance d'un certain nombre, voici la d claration de ces m thodes :
Class Math
{
public static double sqrt(double nb) {&} // retourne la racine carr de nb
public static double pow(double nb, double puissance) {&}// retourne nbpuissance
//&
}
150
()()121222yyxxd--+=
Les tableaux
Enonc
Il s'agit de d finir une classe repr sentant un tableau tri (ordre croissant) d'entiers. La classe appel e
TableauTrie aura un attribut priv qui sera un tableau d'entiers.
1) Pr voir deux constructeurs :
Le premier permet d'allouer un tableau dont la capacit est pr cis e par le programmeur
Le second admet comme param tre la dimension du tableau allouer
2) Les m thodes suivantes seront galement pr vues :
void inserer (int entier) : ins re un entier dans le tableau en respectant un ordre croissant sur les
entiers.
void retirer (int entier) : retire un entier donn e, si un tel entier est dans le tableau. Si l'entier figure
plusieurs fois, une seule occurrence est retir e.
void afficher ( ) : affiche le contenu du tableau avec le message suivant au d part "Ceci est un
nouveau affichage".
3) crire la classe EssaiTableauTrie qui contient la m thode main permettant de tester la classe
TableauTrie contenant les instructions suivantes :
Cr ation d'un tableau de taille 10
Insertion des valeurs 1 3 4 dans le tableau
Affichage du tableau
Insertion de la valeur 2 dans le tableau
Affichage du tableau
Insertion de la valeur 0 dans le tableau
Affichage du tableau
Insertion de la valeur 1 dans le tableau
Affichage du tableau
Retirer la valeur 1 du tableau
Affichage du tableau
Retirer la valeur 0 du tableau
Affichage du tableau
Retirer la valeur 4 du tableau
Affichage du tableau
151
Les cha nes de caract res
Enonc
1) Compl ter la classe "Coordonnees" repr sentant les coordonn es dune personne avec les
champs:
nom, pr nom, t l phone, adresse. Munissez-la d'un constructeur.
class Coordonnees
{
private String nom;
private String prenom;
private String telephone;
private String adresse;
//&. compl ter
}
2) Compl ter la classe "CarnetCoordonnees" repr sentant un carnet de coordonn es. Elle
contiendra:
Les attributs priv s suivants :
- un tableau de coordonn es nomm "carnet"
- un entier nomm "nbCoordonnees" repr sentant le nombre d' l ments de "carnet"
Les m thodes suivantes :
- un constructeur pour d finir un carnet vide pouvant contenir 100 coordonn es au maximum
- void ajouterCoordonnees (Coordonnees c ) : pour ajouter les coordonn es d'une personne dans
"carnet"
- void chercherCoordonnees (String nom, String prenom) : pour retrouver et afficher les
coordonn es d'une personne (t l phone et adresse) partir de son nom et de son pr nom.
Si cette m thode ne trouve pas les coordonn es de la personne dans carnet, elle affichera un
message d'erreur.
- void affiche ( ) : pour afficher toutes les coordonn es se trouvant dans carnet.
Voici la classe qui teste la classe Coordonnees :
class Test
{
public static void main (String [ ] args)
{
CarnetCoordonnees c = new CarnetCoordonnees ( );
c.ajouterCoordonnees(new Coordonnees("Ben Ali", "Mohamed", "233152", "Tunis"));
c.ajouterCoordonnees (new Coordonnees("Ben Amor", "Seif", "453689", "Sousse"));
c.ajouterCoordonnees (new Coordonnees("Selmani", "Akram", "289563", "Sfax"));
c.affiche ( );
c.chercherCoordonnees("Ben Ali", "Mohamed");
}
}
// & compl ter
152
H ritage, polymorphisme
Enonc
Application 1:
a) Etape 1
Cr er une classe "Document" comportant les attributs suivant :
String titre, int numId, int nbPages
Cr ez un constructeur par d faut (ie sans argument) qui initialise le titre "X", le num ro 1, le
nombre de pages 0
Cr ez une m thode edition( ) qui affiche les attributs du Document.
Testez votre classe en cr ant un objet dans la m thode principale et en appelant la m thode edition(
).
b) Etape 2
On veut pouvoir saisir sur la ligne de commande le titre, le num ro didentification ainsi que le
nombre de page pour construire un objet du type document : crire un deuxi me constructeur
prenant trois param tres pour tenir compte de ce besoin.
Dans la m thode principale, en fonction du nombre darguments sur la ligne de commande,
appelez lun ou lautre des constructeurs.
Application 2:
On souhaite g rer une biblioth que pouvant contenir diff rents types de documents :
1.
2.
3.
4.
Des documents simples : Ils sont caract ris s par un titre, un num ro
didentification, le nombre de pages => R utilisez la classe Document de l'exercice 1
Des articles : Ce sont des documents simples poss dant une caract ristique
compl mentaire, le nom de leur auteur (repr sentable par un objet de la classe String).
Des livres : Ce sont des articles poss dant une caract ristique compl mentaire, le
nom de leur diteur (repr sentable par un objet de la classe String).
Des p riodiques : Ce sont des documents simples poss dant une caract ristique
compl mentaire, leur fr quence de parution ("Mensuel", "Hebdo" ou "Quotidien").
Chaque document poss de une m thode edition() qui permet dafficher l cran son type (Livre,
Article, &.) et ses caract ristiques.
Chaque document est ajout lors de sa cr ation dans une biblioth que (un objet de la classe Biblio).
Une classe de test sp cifique vous est fournie :
public class Tp2_2 {
public static void main(String args[]) {
Biblio B = new Biblio ();
B.ajoute(new Livre("Bilbo le Hobbit", 1, 1368, "Tolkien", "j'ai lu"));
Publicité
B.ajoute(new Periodique("L'Evenement", 2, 70, "Hebdo"));
B.ajoute(new Livre("Java par la pratique", 3, 540, "Josh Peck", "O'Reilly"));
B.ajoute(new Article("Java est cool", 4, 5, "Toto"));
System.out.println ("La biblioth que contient "+B.taille()+" documents");
B.afficheContenu ();
}
}
153
Voici le squelette de la classe Biblio :
public class Biblio {
private Document[] tabDoc ;
private int nbDoc = 0 ;
private final int MAXDOC = 50 ;
public Biblio() {
tabDoc = new Document ;
}
public void ajoute(Document d) {
& // Ajoute d la biblioth que
}
public void afficheContenu(){
& // Affiche le contenu de la biblioth que
}
public int taille() { return nbDoc ; }
}
Question : Ecrire les classes Document, Article, Livre, Periodique et Biblio, de mani re ce
que la m thode Main de la classe Tp2_2 fonctionne correctement. Utiliser chaque fois que
vous le pouvez la r f rence super.
154
Classes abstraites, Interfaces
Enonc
Il s'agit de compl ter le programme suivant :
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, false);
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++)
{
listeSons .parle ( ); // parle ( ) est polymorphe
listeMammiferes .vitesse ( ); // vitesse ( ) est polymorphe
}
}
}
interface Son
{
void parle ( );
}
absract class Mammifere implements Son
{
// Attributs
String nom, son;
int ge;
// Constructeur
Mammifere (String nom, String son, int age)
{
this.nom = nom;
this.son = son;
this.age = age;
}
// M thode parle affiche le son d'un mammif re
public void parle ( )
{
System.out.println (son+this);
}
// M thode abstraite vitesse
abstract void vitesse();
//... compl ter
}
155
class Homme extends Mammifere
{
boolean mari ;
// ... compl ter
}
class Chien extends Mammifere
{
String race;
// .... compl ter
}
A l'ex cution de Test on obtient l' cran :
Bonjour mon nom est Ali j'ai 20 ans je suis mari
Je cours une vitesse de 20 km/h
Wouah! mon nom est Snoopy j'ai 2 ans j'appartient la race des caniches
Je cours une vitesse de 30 km/h
156
Les exceptions
Enonc
Soit le programme suivant qui calcule la factorielle d'un entier pass comme param tre travers la
ligne de commande :
public class TestFact
{
public static void main (String [ ] args)
{
int n = Integer.parseInt(args[0]);
if (n == 0) System.out.println ("La factorielle de "+n+" est: 1");
else
{
int f = 1;
for (int i=2; i <= n; i++) f = f*i;
System.out.println ("La factorielle de "+n+" est: "+f);
}
}
}
Il s'agit de reprendre ce programme pour l'am liorer en attrapant diff rentes exceptions de fa on
pr ciser la difficult l'utilisateur, lorsque le calcul de la factorielle est impossible.
Les exceptions pr voir sont :
Il n'y a pas de param tre sur la ligne de commande
Le param tre n'est pas entier
Le param tre est n gatif
Pour chacun de ces cas l'erreur doit tre signal e de fa on pr cise l'utilisateur.
Indications :
- Si args[0] n'est pas un entier la m thode parseInt lance une exception instance de
NumberFormatException (du package java.lang)
- Si l'acc s un tableau se fait avec un indice erron (indice n gatif ou sup rieur la taille du
tableau) une exception instance de ArrayIndexOutOfBoundsException (du package java.lang)
est lanc e
157
Corrections des travaux
pratiques
158
l ments traditionnels de Java
Remarque: Il n' y a pas de correction pour ce chapitre, il s'agit seulement de se familiariser avec
l'environnement de d veloppement Microsoft J++
159
Objets, Classes
Solution
class Date
{
// D claration des attributs
private int jour, mois, annee;
// Constructeur
Date (int j, int m, int a)
{
jour = j;
mois = m;
annee = a;
}
// M thode bissextile : priv e car destin e a tre utilis e l'int rieur de cette classe
private boolean bissextile ( )
{
if (annee % 4 == 0) return (true);
else return (false);
}
// M thode nombreJours
int nombreJours ( )
{
int n;
switch (mois)
{
case 1 :
case 3 :
case 5 :
case 7 :
case 8 :
case 10:
case 12:
case 2 :
case 4 :
case 6 :
case 9 :
case 11:
default :
n = 31;
break;
if (bissextile( )) n = 29;
else
n = 28;
break;
n = 30;
break;
n = 0;
break;
}
return (n);
}
// M thode dateValide
boolean dateValide ( )
{
if ((jour > 0) && (jour <= nombreJours ( )) && (mois > 0) && (mois <= 12) && (annee >
Publicité
0))
else
return (true);
return (false);
160
}
// M thode lendemain
Date lendemain ( )
{
Date d = new Date (jour, mois, annee);
if (d.jour < nombreJours ( ))
d.jour++;
else
{
d.jour = 1;
if (d.mois < 12)
d.mois ++;
else
{
d.mois = 1;
d.annee ++;
}
}
return (d);
}
// M thode accesseur getJour
int getJour ( )
{
return (jour);
}
// M thode accesseur getMois
int getMois ( )
{
return (mois);
}
// M thode accesseur getAnnee
int getAnnee ( )
{
return (annee);
}
}
class TesterDate
{
public static void main (String [ ] args)
{
// Cr ation d'un objet Date partir des valeurs jour, mois et annee introduites // partir
de la ligne de commande
Date d = new Date (Integer.parseInt(args[0]), Integer.parseInt(args[1]),
Integer.parseInt(args[2]));
// Affichage de la date
System.out.println ("Date courante:"+d.getJour( ) + "/" + d.getMois( ) + "/" +
d.getAnnee( ));
if (d.dateValide ( ))
{
// Affichage du nombre de jours
System.out.println ("Nombre de jours de ce mois :"+d.nombreJours( ));
// Affichage de la date de demain
161
System.out.println ("Demain sera: "+d.lendemain( ).getJour( ) + "/" +
d.lendemain( ).getMois( ) + "/" + d.lendemain( ).getAnnee( ));
// ou encore
// Date demain = d.lendemain ( ) ;
// System.out.println ("Demain sera: " + demain.getJour( ) + "/" +
demain.getMois( ) + "/" +d.lendemain( ).getAnnee( ));
}
else
}
}
System.out.println ("Cette date n'est pas valide");
162
Compl ments sur les objets et les classes
Solution
class Point
{
// Les attributs
private double x, y;
// Constructeur
Point (double x, double y)
{
this.x = x;
this.y = y;
}
// M thode distance calcule la distance entre deux points
static double distance (Point p1, Point p2)
{
double d;
d = Math.sqrt(Math.pow((p1.x-p2.x),2.0)+ Math.pow((p1.y-p2.y),2.0));
return (d);
}
// M thode affiche : affiche les coordonn s d'un point
void affiche (int n)
{
System.out.println ("p"+n+" = "+ "( "+x+" , "+y+" )");
}
}
163
Les tableaux
Solution
class TableauTrie
{
// D claration des attributs
private int [ ] tab ; // D claration du tableau
private int nbElem ; // Nombre d' l ments du tableau
// Constructeurs
TableauTrie (int n) // Dimension indiqu e par le constructeur
{
tab = new int ;
}
TableauTrie ( )
{
tab = new int [100]; // Dimension indiqu e par le programmeur
}
// M thode inserer : ajoute un l ment au tableau (au bon endroit)
void inserer (int entier)
{
int i=0, j;
if (nbElem < tab.length)
{
// Avancer dans le tableau pour chercher la position d'insertion
while ((tab <entier) && (i < nbElem)) i++;
// D caler droite tous les l ments qui vont se trouver apr s l' l ment
// ins rer
for (j = nbElem; j > i; j--)
{
tab = tab ;
}
// Ins rer l' l ment dans le tableau
tab = entier;
// Incr menter le nombre d' l ments du tableau
nbElem ++;
}
}
// M thode retirer : enl ve un l ment du tableau
void retirer (int entier)
{
int i;
boolean trouve;
// Rechercher l' l ment retirer
for (i = 0, trouve = false; ((i < nbElem)&&(trouve == false)); i++)
{
if (tab == entier) trouve = true;
}
if (trouve)
{
// craser l' l ment retirer en effectuant un d calage gauche de tous
164
// les l ments qui se trouvent droite de l' l ment retirer
while (i < nbElem)
{
tab = tab ;
i++;
}
// D cr menter le nombre d' l ments du tableau
nbElem --;
}
}
// M thode affiche : affiche le contenu du tableau
void affiche ( )
{
System.out.println ("Nouveau affichage :");
for (int i=0; i<nbElem; i++)
System.out.println (tab );
}
}
class EssaiTableauTrie
{
public static void main (String [ ] args)
{
TableauTrie t1 = new TableauTrie (10);
t1.inserer (1);
t1.inserer (3);
t1.inserer (4);
t1.affiche ( ) ;
t1.inserer (2);
t1.affiche ( );
t1.inserer (0);
t1.affiche ( ) ;
t1.inserer (1);
t1.affiche ( ) ;
t1.retirer(1);
t1.affiche ( );
t1.retirer(0);
t1.affiche ( );
t1.retirer(4);
t1.affiche ( );
// on obtient sur cran la fin :
Publicité
1
2
3
}
}
165
Les cha nes de caract res
Solution
class Coordonnees
{
// Attributs
private String nom;
private String prenom;
private String telephone;
private String adresse;
// Constructeur
Coordonnees (String nom, String prenom, String telephone, String adresse)
{
this.nom = nom;
this.prenom = prenom;
this.telephone = telephone;
this.adresse = adresse;
}
// Accesseur nom
String getNom ( )
{
return (nom);
}
// Accesseur prenom
String getPrenom ( )
{
return (prenom);
}
// Accesseur telephone
String getTelephone ( )
{
return (telephone);
}
// Accesseur adresse
String getAdresse ( )
{
return (adresse);
}
}
class CarnetCoordonnees
{
// Attributs
private Coordonnees [ ] carnet ;
private int nbCoordonnees ;
// Constructeur
CarnetCoordonnees ( )
{
carnet = new Coordonnees [100];
}
// M thode ajouterCoordonnees : ajoute une coordonn e d'une personne dans carnet
void ajouterCoordonnees (Coordonnees c )
{
166
carnet = c;
nbCoordonnees++;
}
// M thode chercherCoordonnees : affiche l'adresse et le t l phone d'une personne
void chercherCoordonnees (String nom, String prenom)
{
boolean trouve = false;
for (int i=0; i<nbCoordonnees && !trouve; i++)
{
if (nom.equals(carnet .getNom( ))&&
prenom.equals(carnet .getPrenom( ) ))
{
}
trouve = true;
System.out.println ("Nom : "+nom+", Pr nom : "+prenom+",
T l phone : "+carnet .getTelephone( )+", Adresse : " +
carnet .getAdresse ( ));
}
if (!trouve)
System.out.println (nom+" "+prenom+" ne se trouve pas dans le carnet d'adresses");
}
// M thode affiche : affiche toutes les coordonn es de carnet
void affiche ( )
{
for (int i=0; i<nbCoordonnees; i++)
{
System.out.println ("Nom :"+carnet .getNom( )+", Pr nom : " +
carnet .getPrenom( ) +", T l phone: "+carnet .getTelephone( )+", Adresse :
" + carnet .getAdresse( ));
}
}
}
167
H ritage, polymorphisme
Solution
Application 1:
a)
class Document
{
String titre;
int numId;
int nbPages;
Document ()
{
titre = "X";
numId = -1;
nbPages = 0;
}
Document (String t, int num, int nb)
{
titre = t;
numId = num;
nbPages = nb;
}
void edition ( )
{
System.out.println ("Titre = "+ titre);
System.out.println ("numId = "+ numId);
System.out.println ("nbPages = "+ nbPages);
}
}
public class Test
{
public static void main (String[] args)
{
Document d = new Document( );
d.edition( );
}
}
b)
public class Test
{
public static void main (String[] args)
{
Document d;
if (args.length == 0)
d = new Document( );
else
d = new Document(args[0],Integer.parseInt(args[1]), Integer.parseInt(args[2]));
d.edition( );
}
}
Application 2:
class Document
{
String titre;
int numId;
168
int nbPages;
Document ()
{
titre = "X";
numId = -1;
nbPages = 0;
}
Document (String t, int num, int nb)
{
titre = t;
numId = num;
nbPages = nb;
}
void edition ()
{
System.out.println ("Titre = "+ titre);
System.out.println ("numId = "+ numId);
System.out.println ("nbPages = "+ nbPages);
}
}
class Article extends Document
{
String Auteur;
String Type = "Article";
Article (String t, int num, int nb, String aut)
{
super (t, num, nb);
Auteur = aut;
}
void edition ()
{
System.out.println ("Type = "+ Type);
super.edition();
System.out.println ("Auteur = "+ Auteur);
}
}
class Livre extends Article
{
String Editeur;
String Type = "Livre";
Publicité
Livre (String t, int num, int nb, String aut, String edit)
{
super (t, num, nb, aut);
Editeur = edit;
}
void edition ( )
{
System.out.println ("Type = "+ Type);
System.out.println ("Titre = "+ titre);
System.out.println ("numId = "+ numId);
System.out.println ("nbPages = "+ nbPages);
System.out.println ("Auteur = "+ Auteur);
System.out.println ("Editeur = "+ Editeur);
}
}
class Periodique extends Document
{
String Frequence;
String Type = "Periodique";
169
Periodique (String t, int num, int nb, String freq)
{
super (t, num, nb);
Frequence = freq;
}
void edition ( )
{
System.out.println ("Type = "+ Type);
super.edition();
System.out.println ("Fr quence = "+ Frequence);
}
}
class Biblio
{
private Document [] tabDoc;
private int nbDoc = 0;
private final int MaxDoc = 50;
Biblio()
{
}
void ajoute (Document d)
{
tabDoc = new Document ;
tabDoc = d;
}
void afficheContenu ()
{
for (int i =0; i<nbDoc; i++)
{
System.out.println ();
tabDoc .edition();
}
}
int taille ()
{ return nbDoc;}
}
public class Biblio
{
public static void main (String[] args)
{
Biblio B = new Biblio ();
B.ajoute(new Livre("Bilbo le Hobbit", 1, 1368, "Tolkien", "j'ai lu"));
B.ajoute(new Periodique("L'Evenement", 2, 70, "Hebdo"));
B.ajoute(new Livre("Java par la pratique", 3, 540, "Josh Peck", "O'Reilly"));
B.ajoute(new Article("Java est cool", 4, 5, "Toto"));
System.out.println ("La biblioth que contient "+B.taille()+" documents");
B.afficheContenu ();
toto t = new toto () { void affiche2 ( ){System.out.println ("titi"); }};
t.affiche ();
}
}
170
Classes abstraites, Interfaces
Solution
interface Son
{
void parle ();
}
abstract class Mammifere implements Son
{
// Attributs
String nom, son;
int age;
// Constructeur
Mammifere (String nom, String son, int age)
{
this.nom = nom;
this.son = son;
this.age = age;
}
// M thode parle affiche le son d'un mammif re
public void parle ( )
{
System.out.println (son+this);
}
// M thode abstraite vitesse
abstract void vitesse();
// M thode toString red finie
public String toString ( )
{
return (" mon nom est "+nom +" j'ai "+age+" ans");
}
}
class Homme extends Mammifere
{
boolean marie;
// Constructeur
Homme (String nom, String son, int age, boolean marie)
{
super (nom, son, age);
this.marie = marie;
}
// Impl mentation de la m thode vitesse
void vitesse ( )
{
System.out.println ("Je cours une vitesse de 20km/h");
}
// M thode toString red finie
public String toString ( )
{
171
if (marie) return (super.toString() +" je suis marie");
else
return (super.toString() +" je suis c libataire");
}
}
class Chien extends Mammifere
{
String race;
// Constructeur
Chien (String nom, String son, int age, String race)
{
super (nom, son, age);
this.race = race;
}
// Impl mentation de la m thode vitesse
void vitesse ( )
{
System.out.println ("Je cours une vitesse de 30km/h");
}
// M thode toString red finie
public String toString ( )
{
return (super.toString ( ) +" j'appartient la race des "+race) ;
}
}
172
exceptions
Solution
class TestFact
{
public static void main(String [ ] args)
{
try
{
int n = Integer.parseInt(args[0]);
if (n < 0) throw new NombreNegatifException ( );
if (n == 0)
System.out.println ("La factorielle de "+n+" est: 1");
else
{
}
int f = 1;
for (int i=2; i <= n; i++) f = f*i;
System.out.println ("La factorielle de "+n+" est: "+f);
}
catch (ArrayIndexOutOfBoundsException e)
{
System.out.println ("Erreur, il n'y a pas de param tre sur la ligne de
commande!");
}
catch (NumberFormatException e)
{
System.out.println ("Erreur, le param tre n'est pas entier!");
}
catch (NombreNegatifException e)
{
System.out.println ("Erreur, le param tre est n gatif!");
}
}
}
class NombreNegatifException extends Exception
{
}
173