Partage
  • Partager sur Facebook
  • Partager sur Twitter

gerer les exception

calcul de la factorielle

    12 mai 2009 à 20:45:05

    bonsoir
    je traite trois types d'exception pour le calcul de la factorielle :
    nb non inqiqué dans la ligne de commande
    nb negatif
    et quand on a un depassement de capacité en calculant la factorielle
    mon code est le suivant
    mais il me genere une erreur que je n'arrive pas à regler avec négaexeption (je travaille avec eclipse)
    merci pour votre aide


    package tp_archi;
    import java.lang.*;



    class factoriel {
    private int nb;
    public factoriel (int nb)
    {this.nb=nb;}
    public int getnb()
    {return(nb);}





    public int calcul() throws ArithmeticException {
    int factorielle = 1;

    for (int i = 2; i <= nb; i++) {
    if (factorielle > Integer.MAX_VALUE / i) {
    throw new ArithmeticException("dépassement de capacité lors du calcul de la factorielle de " + nb);
    }
    factorielle *= i;
    }
    return factorielle;
    }


    class negaException extends Exception
    {public negaException(String s)
    {super(s);}}





    public static void main(String [] args)
    {try
    {int a=Integer.parseInt(args[0]);
    factoriel f=new factoriel(a);
    if (a<0) throw new negaException("la factorielle n'est pas défini");
    System.out.println("le factoriel de "+f.getnb()+" est "+f.calcul());
    }

    catch (ArrayIndexOutOfBoundsException e1) {System.out.println("veuillez indiquer le nombre sur la ligne de commande");}
    catch (NumberFormatException e2) {System.out.println("nb non entier");}
    catch (negaException e3) {System.out.println("-4 est negatif :"+e3.getMessage());}

    }
    }


    merci
    • Partager sur Facebook
    • Partager sur Twitter
      12 mai 2009 à 20:46:58

      Peux-tu mettre ton code entre les balises appropriées ?
      En espérant que l'indentation soit présente.
      (tu peux éditer ton post, inutile d'en refaire)
      • Partager sur Facebook
      • Partager sur Twitter
        12 mai 2009 à 22:50:14

        package tp_archi;
        import java.lang.*;
        
        
        
        class factoriel {
                private int nb;
                public factoriel (int nb)
                        {this.nb=nb;}
                public int getnb()
                        {return(nb);}
         
                
        
                
        
        public int calcul() throws ArithmeticException {
                   int factorielle = 1;
                  
                   for (int i = 2; i <= nb; i++) {
                      if (factorielle > Integer.MAX_VALUE / i) {
                        throw new ArithmeticException("dépassement de capacité lors du calcul de la factorielle de " + nb);
                      }
                      factorielle *= i;
                   }
                   return factorielle;
                }
        
        
        class negaException extends Exception
        {public negaException(String s)
        {super(s);}}
        
        
        
        
        
        public static void main(String [] args)
        {try
            {int a=Integer.parseInt(args[0]);
            factoriel f=new factoriel(a);
            if (a<0) throw new negaException("la factorielle n'est pas défini");
            System.out.println("le factoriel de "+f.getnb()+" est "+f.calcul());
            }
        
        catch (ArrayIndexOutOfBoundsException e1) {System.out.println("veuillez indiquer le nombre sur la ligne de commande");}
        catch (NumberFormatException e2) {System.out.println("nb non entier");}
        catch (negaException e3) {System.out.println("-4 est negatif :"+e3.getMessage());}
         
        }
        }
        • Partager sur Facebook
        • Partager sur Twitter
          12 mai 2009 à 22:58:49

          Rater, il fallait mettre code java (la balise est <code type="java"></code> )
          Il y a plusieurs erreurs (incohérence dans ton code), mais avant d'en parler, quelle erreur t'affiche Eclipse.
          PS : Fait attention à ton indentation
          package tp_archi;
          import java.lang.*;
          
          
          
          class factoriel {
                  private int nb;
                  public factoriel (int nb)
                          {this.nb=nb;}
                  public int getnb()
                          {return(nb);}
           
                  
          
                  
          
          public int calcul() throws ArithmeticException {
                     int factorielle = 1;
                    
                     for (int i = 2; i <= nb; i++) {
                        if (factorielle > Integer.MAX_VALUE / i) {
                          throw new ArithmeticException("dépassement de capacité lors du calcul de la factorielle de " + nb);
                        }
                        factorielle *= i;
                     }
                     return factorielle;
                  }
          
          
          class negaException extends Exception
          {public negaException(String s)
          {super(s);}}
          
          
          
          
          
          public static void main(String [] args)
          {try
              {int a=Integer.parseInt(args[0]);
              factoriel f=new factoriel(a);
              if (a<0) throw new negaException("la factorielle n'est pas défini");
              System.out.println("le factoriel de "+f.getnb()+" est "+f.calcul());
              }
          
          catch (ArrayIndexOutOfBoundsException e1) {System.out.println("veuillez indiquer le nombre sur la ligne de commande");}
          catch (NumberFormatException e2) {System.out.println("nb non entier");}
          catch (negaException e3) {System.out.println("-4 est negatif :"+e3.getMessage());}
           
          }
          }
          
          • Partager sur Facebook
          • Partager sur Twitter
            12 mai 2009 à 23:19:49

            au niveau
            public static void main(String [] args)

            if (a<0) throw new negaException("la factorielle n'est pas défini");

            il m'affiche: no enclosing of type factoriel is accessible must qualify the allocation with an enclosing instance of type factoriel

            merci
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              13 mai 2009 à 0:19:43

              il a besoin de l'instance f vu que nega exception est une inner class

              soit
              throw f.new negaException("la factorielle n'est pas défini");
              

              mais c'est moche.

              soit tu sors ta classe negaException, et la c'est beaucoup mieux.


              • Partager sur Facebook
              • Partager sur Twitter
                13 mai 2009 à 9:31:24

                merci pour votre reponse

                c bon ça marche il ne ma'ffiche plus l'erreur precedente quoique le programme ne s'execute pas dutout quand je saisi une valeur cette derniere n'apparait même pas sur l'ecran!!!

                merci pour votre aide
                • Partager sur Facebook
                • Partager sur Twitter
                  13 mai 2009 à 11:10:22

                  Stp va lire mon post sur les conventions de codage en Java et également les liens qui s'y trouvent => http://www.siteduzero.com/forum-83-391 [...] -en-java.html
                  • Partager sur Facebook
                  • Partager sur Twitter

                  gerer les exception

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown