Accéder au contenu principal

Exception:L'âge du capitaine

Exercice 2- L'âge du capitaine
1- Écrire une méthode getAgeCap() qui demande l'âge du capitaine. Cet âge doit
être compris entre 18 et 65 ans et doit être un entier sous peine de lever
une AgeCapException. Vous implementerez cette exception pour qu'elle renvoie
une description explicite du type "[proposition] ans n'est pas un âge valide". Le
programme devra également être en mesure de capturer tout type d'exception autre
queAgeCapException.
2- Dans un premier temps, la méthode getAgeCap() propagera l'exception à la
méthode appelante qui la traitera.
3- Modifier le programme pour que ce soit la méthode getAgeCap() qui traite
l'exception.
4- Modifier encore le programme pour que getAgeCap() traite l'exception mais lève
une seconde exception de type Exception pour signaler à la méthode appelante
qu'une erreur s'est produite et que cette dernière comptabilise le nombre d'essais
infructueux et l'affiche. Le programme demandera l'âge du capitaine en boucle
infinie.
solution:
1-:ecrire une class AgeCapException herite de class Exception qui contient message d'erreure  :

public class AgeCapException extends Exception {

AgeCapException(int age)
{
System.out.println(age+" ans non valide ");
}
}


import java.util.Scanner;


public class Test {

static Scanner sc=new Scanner(System.in);
public static void main(String[] args) {
try{
int age=GetAgeCap();
System.out.println(age+" ans , c'est l'age de capitane");
}
catch(AgeCapException e){
}
catch(Exception e){
//e.printStackTrace();
System.out.println("il faut entrer un entier");
}
       
System.out.println("ok termine");
}

public static int GetAgeCap()throws AgeCapException,Exception
{
System.out.println("entrer l'age de capitane :");
int age=sc.nextInt();
if(age<18||age>65) throw new AgeCapException(age);
return age;
}
}
2:autre methode:

1- class AgeCapException extends Exception{ int iAge; 

AgeCapException(int iAge){

 this.iAge=iAge; } 

public String toString(){ return new String(iAge +" n'est pas un âge valide"); }

 }

2- import java.io.*; 

class AgeCap { int iAge;

 public static void main(String[] sArgs){ 

new AgeCap(); //le main sert uniquement à instancier la classe courante, ceci évite d'avoir à utiliser des variables et méthodes statiques } 

AgeCap(){ 

try{

 iAge=getAgeCap();

 System.out.println("Age= "+iAge+" ans"); 

} catch(AgeCapException ace){ ace.printStackTrace(); }

 catch(Exception e){ //on capture toutes les autres exceptions e.printStackTrace(); }

 }public int getAgeCap() throws AgeCapException,Exception{

 char c; int iAge; 

System.out.print("Age du capitaine : "); 

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

 String sAge=br.readLine();

 iAge=Integer.parseInt(sAge.trim()); //le trim enlève le '\n' et parseInt() transforme un String en int primitif

 if (iAge<18 || iAge>65){ throw new AgeCapException(iAge); //on lève une AgeCapException en cas d'erreur

return iAge;

 } }

3- import java.io.*;

 class AgeCap { int iAge; 

public static void main(String[] sArgs){ 

new AgeCap(); 

} AgeCap(){ iAge=getAgeCap();

 System.out.println("Age= "+iAge+" ans"); 

} public int getAgeCap(){ char c;

 System.out.print("Age du capitaine : ");

 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

 try{ String sAge=br.readLine();

 iAge=Integer.parseInt(sAge.trim()); 

if (iAge<18 || iAge>65){ throw new AgeCapException(iAge); } } 

catch(AgeCapException ace){ ace.printStackTrace(); iAge=0; } 

catch(Exception e){ e.printStackTrace();

 iAge=0; }

return iAge; } }

4- import java.io.*; 

class AgeCap { int iAge;

 public static void main(String[] sArgs){

 new AgeCap();

}

 AgeCap(){ int iComp=0;

 boolean bQuit=false;

 while(!bQuit){ try{ 

iAge=getAgeCap();

 System.out.println("Age= "+iAge+" ans");

 bQuit=true; } 

catch(Exception e){ e.printStackTrace(); 

iComp++; System.out.println(iComp+" essai(s)"); } } }

public int getAgeCap() throws Exception{

 char c; 

System.out.print("Age du capitaine : ");

 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

 try{ String sAge=br.readLine(); 

iAge=Integer.parseInt(sAge.trim());

 if (iAge<18 || iAge>65){ throw new AgeCapException(iAge); } }

 catch(AgeCapException ace){ //on capture l'AgeCapException ace.printStackTrace();

 throw new Exception(); //on lève une Exception }

 catch(Exception e){ e.printStackTrace();

 throw new Exception(); //on lève une Exception } return iAge; } }

Posts les plus consultés de ce blog

Exercice1 : Calcul des impôts locaux Dans le cadre de l’informatisation d’une mairie, on veut automatiser le calcul des impôts locaux. On distingue deux catégories d’habitation : les habitations à usage professionnel et les maisons individuelles, l’impôt se calculant différemment selon le type d’habitation.Pour cela ,on définit les classes HabitationProfessionnelle et HabitationIndividuelle et les caractéristiques communes à ces deux classes sont regroupées dans la classe Habitation. L’objectif du problème est d’implémenter ce schéma d’héritage et de mettre en œuvre le mécanisme de liaison dynamique. A) Définition de la classe Habitation : La classe Habitation comprend les attributs : -propriétaire du type chaine de caractères et qui correspond au nom de propriétaire, -adresse du type chaine de caractères et qui correspond à l’adresse de l’habitation, -surface du double et qui correspond à la surface de l’habitation, Les méthodes : -Impot ( ) qui permet de calculer le montant de l
 Dans le cadre de l’informatisation d’une entreprise, un directeur souhaite automatiser la gestion des salaires de ses employés pour cela on aura : -Une classe Employe : Un employé est caractérisé par : +ces attributs : nom(chaine de caractères), son prénom(chaine de caractères) et son âge(entier),son année de recrutement(entier) +Ces méthodes : -Un constructeur a quatre paramètres permettant d’initialiser une instance de la classe Employe. +Affiche() :qui permet d’afficher les quatre attributs de la classe Employe. +CalculSalaire() :permet de renvoyer le salaire mensuel d’un employé mais ce calcul dépend du type de l'employé. On distingue les types d'employés suivants qui seront définie dans les classes suivantes: -Producteur : Leur salaire vaut le nombre d'unités produites mensuellement multipliées par 5 : Ajouter l’attribut NbUnités de type entier ;Définir la méthode CalculSalaire() ;Redéfinir la méthode Affiche( ) -Commercial : Leur salaire mensuel se calcule en fon

Les exceptions:Saisie d'un mot de passe

Exercice 3- Saisie d'un mot de passe Dans les failles de sécurité réseau, on trouve très souvent les problèmes de dépassement. Par exemple, sur certaines anciennes versions de telnet, un login ou un mot de passe de plus d'un mega-octet faisait "planter" le programme et on obtenait alors un accès root au système. Ce programme va gérer ce type de problème en séparant les exceptions pour une meilleure gestion. 1- Écrire un programme stand-alone qui demande en boucle un nom d'utilisateur (login) et un mot de passe (pwd) jusqu'à recevoir un login/pwd correct. Le seul utilisateur référencé sera scott / tiger ( à mettre en constante dans la classe principale ). 2- Implémenter les exceptions suivantes: * WrongLoginException qui se produit lorsque l'utilisateur saisit un login inexistant * WrongPwdException lorsque le mot de passe est erroné * WrongInputLength lorsque le login où le pwd saisi dépasse 10 caractères. 3- Implémenter de façon à utiliser
Exercice2 : Ecrivez une interface Forme avec les méthodes abstraites suivantes: - perimetre(): renvoie le périmètre de la forme, - aire(): renvoie l'aire de la forme. Ecrivez une classe Carre et Rectangle implémentant l'interface Forme avec les attributs suivants:carre(cote:le coté du carré) et Rectangle ( longueur et largeur) Ces deux classes doivent disposer les constructeurs suivants: -Carre( ),Carre(cot). -Rectangle( ),Rectangle( largeur,longueur). Elles doivent contenir des accesseurs et mutateurs pour leurs différents attributs,et les méthodes suivantes: - perimetre( ): Donne le périmètre de la forme, - aire( ): Donne l'aire de la forme, - toString( ): Donne une représentation de la forme Ecrivez aussi une classe de testForme afin de tester les classes.                                                       TELECHARGER ICI package exo2; public interface Forme {      public double perimetre();    public double aire(); } package

Il s'agit de modéliser un segment de droite dont les valeurs des deux extrémités sont entières. Si on échange les deux extrémités, on considère qu'il s'agit encore du même segment. La classe Segment comporte les méthodes suivantes un constructeur de ce segment recevant en argument les deux valeurs entières des extrémités du segment que l'on veut construire une méthode retournant la longueur du segment une méthode nommée ordonne échangeant éventuellement les valeurs des extrémités du segment de telle sorte que la valeur de extr1 soit au plus égale à la valeur de extr2 une méthode testant si un entier donné se trouve sur le segment (c'est dire s'il est compris entre la plus petite et la plus grande valeur des extrémités du segment). public String toString() :Celle ci décrira une instance de Segment sous la forme d'une chaîne de caractères (par exemple, le segment d'extrémités 35 et 44 pourra être transformé en la chaîne de caractères : "segment [ 35, 44]") (la plus petite extrémité est toujours indiquée à gauche). Ecrivez aussi une autre classe EssaiSegment comportant la méthode main et permettant de tester les méthodes de la classe Segment

package tp2; public class exo1Segment { int extr1 , extr2; public int getExtr1() { return extr1; } public void setExtr1(int extr1) { this.extr1 = extr1; } public int getExtr2() { return extr2; } public void setExtr2(int extr2) { this.extr2 = extr2; } public exo1Segment(int extr1, int extr2) { super(); this.extr1 = extr1; this.extr2 = extr2; } public exo1Segment() { this.extr1 = 0; this.extr2 = 0; } public int  longueur(){ return (int) Math.sqrt(Math.abs(Math.pow(extr1, 2)+Math.pow(extr2, 2))); } public void  ordone(){ int ech; if(extr1>extr2){ ech=extr1;     extr1=extr2;     extr2=ech;} } public boolean isIn(int x){ if(x>Math.min(extr1, extr2) && x<Math.max(extr1, extr2) ) return true; return false; } public String toString(){ return  "segment ["+Math.min(extr1, extr2)+","+ Math.max(extr1, extr2)+"]"; } }

Exercice2 : Ecrivez une classe Complexe représentant des nombres complexes. Un nombre complexe comporte une partie réelle et une partie imaginaire (partieReelle + partieImaginaire * i . -La classe Complexe doit disposer des constructeurs suivants: Complexe(): constructeur par défaut, Complexe(partieReelle, partieImaginaire),Complexe(Complexe). -Elle doit contenir des accesseurs et mutateurs pour les différents attributs. -additionner au nombre complexe concerné un autre complexe ; on écrira pour cela une méthode d'instance nommée addition qui recevra en paramètre l'autre complexe et qui ne retournera rien. - additionner deux complexes donnés ; on écrira pour cela une méthode statique nommée aussi addition (en utilisant ainsi la possibilité de la surcharge) qui recevra en paramètres les deux nombres complexes à additionner et qui retournera le résultat sous forme d'un objet de type Complexe. -une méthode toString() donnant une représentation d'un nombre complexe (a+b*i). -Ecrivez aussi une classe testComplexe afin de tester la classe Complexe.

package tp2; class Complex {   static float partieReelle ;   static float  partieImaginaire;         public float getPartieReelle() { return partieReelle; } public void setPartieReelle(float partieReelle) { Complex.partieReelle = partieReelle; } public float getPartieImaginaire() { return partieImaginaire; } public void setPartieImaginaire(float partieImaginaire) { Complex.partieImaginaire = partieImaginaire; } Complex(float r, float i) {     partieReelle  = r;      partieImaginaire = i;   } static void additionner(Complex c2) {   partieReelle=partieReelle+Complex.partieReelle;   partieImaginaire=partieImaginaire+Complex. partieImaginaire;   }   static boolean equals(Complex c1, Complex c2) {     return (Math.abs(Complex.partieReelle -Complex.partieReelle ) ==0 &&         Math.abs(Complex. partieImaginaire-Complex.partieReelle )  == 0);   }     static Complex additionner(Complex c

cour et solution sériel 1 pile file et liste

Représentation chainée d’une pile en C : Cpile.h : typedef int Element; typedef struct cellule {Element valeur;                                            struct cellule *suivant;                                          } cellule; typedef cellule *pile; pile vide_pile (); int pile_est_vide (pile p); pile empiler (pile p, Element e); pile depiler (pile p); void afficher (pile p); void menu (); Cpile.cpp : #include <stdio.h> #include <stdlib.h> #include "Cpile.h" int main() {             menu();                  system("pause");                  return 0; } pile vide_pile(){ return NULL;} int pile_est_vide (pile p) {if (p==NULL) return 1;//1vide                                                 else return 0;//0non vide                                                 } pile empiler (pile p, Element e) {cellule *q= (cellule *) malloc (sizeof (cellule));        

Exercice3: Ecrivez un programme Geometrie qui permet à l'utilisateur d'entrer les coordonnées (x, y) des sommets d'un triangle. Le programme affiche ensuite le périmètre du triangle ainsi qu'un message indiquant s'il s'agit d'un triangle isocèle. Votre programme doit être orienté objet.

/**  *  */ package tp2; /**  * @author pirate  *  */ public class Point { float x; float y; public Point(float x, float y) { super(); this.x = x; this.y = y; } public float getX() { return x; } public void setX(float x) { this.x = x; } public float getY() { return y; } public void setY(float y) { this.y = y; } public Point() { this.x=0; this.y=0; } public double distance(Point point1,Point point2){ double n=Math.sqrt(Math.pow(Math.abs(point1.x-point2.x),2)+Math.pow(Math.abs(point1.y-point2.y),2)); return n; } } package tp2; import java.util.Scanner; import tp2.Point; public class triangle {   Point p1,p2,p3; public Point getP1() { return p1; } public void setP1(Point p1) { this.p1 = p1; } public Point getP2() { return p2; } public void setP2(Point p2) { this.p2 = p2; } pu

Exercice2: En mathématiques, le triangle de Pascal, est un arrangement géométrique des coefficients binomiaux dans un triangle. À la ligne i et à la colonne j (0 <= j <= i) est placé le coefficient binomial 2 Le but de ce projet est d'écrire un programme qui demande à l'utilisateur de saisir un entier naturel n, non nul. Puis le programme affiche les n premières lignes du triangle de Pascal.

import java.util.Scanner; class Pascal {     private static Scanner scanner = new Scanner(System.in);     public static void main(String[] args) {         int size;         // On demande la taille         System.out.println("Taille du triangle de Pascal : ");         size = scanner.nextInt();         // Ici on déclare le tableau, mais on ne construit que la première         // dimension         int [][] triangle = new int[size][];         // On construit et initialise la 1ère ligne         triangle[0] = new int[1];         triangle[0][0] = 1;         for (int row = 1; row < size; row++) {             // Chaque ligne du triangle est un tableau à une dimension             // dont la taille est celle de la ligne précédente + 1:             // on construit ces lignes (new) au fur et à mesure que l'on             // progresse dans le tableau             triangle[row] = new int [triangle [row - 1].length + 1];             // Remplissage du tableau: