IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Exceptions -propagation et traitement.


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 15
    Par défaut Exceptions -propagation et traitement.
    salut ,

    J ' ai un petit souci en ce qui concerne la propagation et le traitement des exceptions.
    Dans le programme qui suit ,il s 'agit de calcul d' une matrice , je dois cependant lever une exception dans les 2 cas suivants :

    - Soustraction : la matrice ne doit pas accepter une valeur négative
    -Division : je ne peux diviser par Zero

    Or , lorsqu' une méthode appelle une méthode capable de lever une exception , comment l' indiquer , qui catch cette exception?

    Voici le code source :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    public class Matrice {
     
       private int [] [] m ; 
     
       public Matrice(int n ) {
            m = new int [n][n];
     
       }
     
       public void afficher (){
           for (int i = 0 ;i <=m.length -1 ; i ++ ){
               for (int j = 0 ; j<=m[i].length -1 ;j++){
                   System.out.print (m[i][j]+ " ");
     
               }
               System.out.println ();
           }
     
       }
     
       private void operation (int ligne , int colonne , char operation , int val) throws MatriceException{
     
           if (operation == '+'){
               m[ligne][colonne] =m[ligne][colonne]+ val;
     
          }
     
     
            if (operation == '-'){
     
                    //if  (m[ligne][colonne]- val <0 ) throw new SoustractionException ("la matrice ne peut contenir de nombres négatifs");
               m[ligne][colonne] =m[ligne][colonne]- val;
               if  (m[ligne][colonne]<0 ) throw new SoustractionException ("la matrice ne peut contenir de nombres négatifs");
     
     
            }
     
     
       }
     
     
     
     
       private void operations (char operation , int val) {
         //try {   
           for (int  i =0 ; i<=m.length -1 ; i ++ ){
               for ( int j  = 0 ; j<=m[i].length -1 ;j++){
     
                   this.operation(i ,j ,operation , val);
               }
        }
      // }catch (MatriceException e ){
           //System.out.println (" Exception dans methode operations " + e.getMessage());
     
       //}
       }
     
     
     
       public void soustraction (int nombre ) throws SoustractionException {
     
          this.operations ('-' ,nombre );
     
     
     
     
       }
        public void multiplication (int nombre) {
     
       }
         public void division(int nombre) throws DivisionException {
           this.operations ('/' ,nombre );
       }
     
       public void addition (int nombre)  {
           this.operations ('+' ,nombre );
     
     
       }
     
    }
    Merci

  2. #2
    Membre chevronné Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
       private void operation (int ligne , int colonne , char operation , int val) 
    throws MatriceException   C'est pas le même type que les autres !!! 
    {
           
           if (operation == '+'){
               m[ligne][colonne] =m[ligne][colonne]+ val;
           
          }
           
          
            if (operation == '-'){
               
                    //if  (m[ligne][colonne]- val <0 ) throw new SoustractionException ("la matrice ne peut contenir de nombres négatifs");
               m[ligne][colonne] =m[ligne][colonne]- val;
               if  (m[ligne][colonne]<0 ) throw new SoustractionException ("la matrice ne peut contenir de nombres négatifs");
              
               
            }
       
       
       }

  3. #3
    Membre chevronné Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Par défaut
    Citation Envoyé par kamimar Voir le message
    Or, lorsqu' une méthode appelle une méthode capable de lever une exception , comment l' indiquer
    Hé bien, comme tu l'as fait dans ta méthode, en indiquant la clause "throws" dans sa déclaration.

    Citation Envoyé par kamimar Voir le message
    qui catch cette exception?
    Celui qui appellera cette méthode.

    Je me demande si j'ai bien compris la question ...

  4. #4
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 15
    Par défaut
    salut ,

    merci de vos reponses , je pense que je n ' ai pas été assez clair.

    La classe MatriceException étend la classe Exception , les classes DivisionException et SoustractionException étendent la classe MatriceException.

    Lorsque je fais appel à la méthode soustraction (qui peut lever une exception de type SoustractionException) qui appelle la méthode privée opérations , qui elle même appelle la méthode privée operation.


    Methode soustraction appelée dans la main cette méthode appelle la methode privée operations
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void soustraction (int nombre ) throws SoustractionException {
          
          //Appel de la méthode operations
          this.operations ('-' ,nombre );
    }

    Méthode operations appelle la méthode operation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private void operations (char operation , int val) {
         
           for (int  i =0 ; i<=m.length -1 ; i ++ ){
               for ( int j  = 0 ; j<=m[i].length -1 ;j++){
                   
                   //Appel de la méthode operation
                   this.operation(i ,j ,operation , val);
                  
               }
        }
      
    }
    Methode privée operation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     private void operation (int ligne , int colonne , char operation , int val) throws MatriceException{
     
           if (operation == '-'){
     
                   if  (m[ligne][colonne]- val <0 ) throw new SoustractionException ("la matrice ne peut contenir de nombres négatifs");
               m[ligne][colonne] =m[ligne][colonne]- val;
     }
    j espere que c' est un peu plus clair







    le but est de ne pas avoir de valeurs négatifs dans les cellules de la Matrice.

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Non c'est pas plus clair

    Quand un exception (autre que dérivée de RuntimeException) est lancée en un point donnée, il ne peux se passer que 2 chose:
    Soit elle est attrapée dans un catch, la propagation s'arrête
    Soit elle remonte un niveau supérieur (dans ce cas obligation de la présence d'une directive "throws" sur la méthode). Et on recommence le même 2règle à ce niveau supérieur.

    Donc, l'exception est gérée, en gros, dans le premier catch compatible troué lors du chemin de remontée des appels.

  6. #6
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Celui qui lève une exception, c'est celui qui fait throw uneException; (en général on fait directement throw new BonneException();).

    Celui qui catch l'exception, c'est celui qui fait le catch, tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    try
    {
    }
    catch (BonneException jeCatchIci)
    {
     jeCatchIci.printStackTrace();
    }

Discussions similaires

  1. [Exception] Propagation des exceptions
    Par Rayek dans le forum Langage
    Réponses: 5
    Dernier message: 03/08/2007, 16h59
  2. [Exception] les traitements continuent ?
    Par _juel_ dans le forum Langage
    Réponses: 5
    Dernier message: 08/06/2006, 11h25
  3. [Exceptions] propagation
    Par kisame dans le forum C++
    Réponses: 4
    Dernier message: 27/02/2006, 11h02
  4. [Exceptions] Système de traitement des exceptions
    Par jenesuispasunrobot dans le forum Langage
    Réponses: 5
    Dernier message: 07/12/2005, 11h09
  5. Utiliser les exceptions pour un traitement particulier ?
    Par Blustuff dans le forum Assembleur
    Réponses: 11
    Dernier message: 01/12/2004, 02h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo