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

Langage Java Discussion :

[Débutant] Petit probleme try catch


Sujet :

Langage Java

  1. #1
    Membre régulier
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Points : 99
    Points
    99
    Par défaut [Débutant] Petit probleme try catch
    Voila mon problème,

    je crée une classe dans laquelle j'effectue une division, et je dois retourner une valeur. Le problème c'est que j'utilise un try catch pour la divisoin (division par zero impossible)

    Voici le code/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public static float Division(float a, int b) {
            try
            {
                return(a/b);
            }
            catch(ArithmeticException e)
            {
                JOptionPane.showMessageDialog(null,"Division par zéro impossible");
            }
     
        }
    Mais il y a erreur car il me dis que je ne retourne rien (ce qui est vrai car si c'est une division par zero, je en retourne rien.

    Comment faire? Car j'appelle cette division dans une autre classe??

  2. #2
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    Bonjour,

    Si tu dois vraiment retourner qque chose malgré l'exception levée, tu peux utiliser try ... catch ... finally

    A +

  3. #3
    Membre régulier
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Points : 99
    Points
    99
    Par défaut
    Le probleme c'est que si il y a division par zero, je ne dois rien retourner. Comment faire?

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Le compilateur te signale que dans certain cas ta méthode ne renvoit rien...

    Si tu as une ArithmeticException lors de la division, tu affiches le JOptionPane mais après le catch tu ne renvoi rien et ce n'est pas authorisé...

    Il faut obligatoirement retourner quelquechose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public static float Division(float a, int b) {
            float lReturn = Float.NaN;
            try
            {
                lReturn = a/b;
            }
            catch(ArithmeticException e)
            {
                JOptionPane.showMessageDialog(null,"Division par zéro impossible");
            }
            return lReturn;
        }

  5. #5
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    Il me semble que lorsqu'il y a une division par zero dans une operation de float, ca ne renvoie pas une Exception mais simplement une valeur particuliere. Ceci est du, il me semble, a la norme sur les nombres flottant.

  6. #6
    Membre régulier
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Points : 99
    Points
    99
    Par défaut
    Au fait, d'apres le code, je retourne obligatoirement quelque chose

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public static float Division(float a, int b) { 
            float lReturn = Float.NaN; 
            try 
            { 
                lReturn = a/b; 
            } 
            catch(ArithmeticException e) 
            { 
                JOptionPane.showMessageDialog(null,"Division par zéro impossible"); 
            } 
            return lReturn; 
        }
    Or moi, je désire juste afficher un message de division impossible et quitter sans rien afficher (ds le cas de division par 0) sinon je retourne la division.

    Je ne trouve pas d'astuce pour le faire..


    Il me semble que lorsqu'il y a une division par zero dans une operation de float, ca ne renvoie pas une Exception mais simplement une valeur particuliere. Ceci est du, il me semble, a la norme sur les nombres flottant
    Au fait, j'ai mis de float comme ca, mais disons que ces des int.


    Merci pour votre aide.[/quote]

  7. #7
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    re,

    c 1 peu ambigu ce que tu veux faire
    d'un cote
    - tu as 1 methode qui retourne (obligatoirement) 1 valeur
    et de l'autre
    - tu peux ne pas retourner de valeur ...

    Ce que je te propose
    - soit tu ne changes rien à la signature de ta méthode et tu castes 1 null que tu retournes ds la clause finally
    - soit tu change la portée de a et b ( pour pouvoir travailler par référence et plus par valeur) et tu retourne 1 booleen pour indiquer que ta division c'est bien passée

  8. #8
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    Excuse moi, je suis reste localise sur les float, et j'ai pas bien lu le message.

    Ce que je te conseillerais, c'est de declarer que ta fonction Division peut retourner une exception, c'est ainsi celui qui appele la methode Division qui devra gerer le probleme... tu quitteras ainsi sans rien renvoyer et la methode appelante sera tenu au courant.

  9. #9
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Terminator
    Or moi, je désire juste afficher un message de division impossible et quitter sans rien afficher (ds le cas de division par 0) sinon je retourne la division.
    Question : comment tu détecte alors que la division soit bonne ou pas ?

    De puis si tu fais ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float val = Division(15,0);
    Que vaut val dans ce cas ?????

    --> Tu te retrouves dans un état ambigu et le compilateur ne le permet pas !!!


    En quoi cela te dérange-t-il de retourner NaN ?
    Au moins tu sais que la division ne s'est pas bien passé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    float val = Division(15,0);
    if (val==Float.NaN) {
       System.exit(1);
    }
    a++

  10. #10
    Membre régulier
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Points : 99
    Points
    99
    Par défaut
    Merci à tous, je vois plus clair maintenant.

    Meric à toi adiGuba

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    float val = Division(15,0); 
    if (val==Float.NaN) { 
       System.exit(1); 
    }
    J'avais pas vu dans le precedent message.

  11. #11
    Membre régulier
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Points : 99
    Points
    99
    Par défaut
    Une derniere question: peut-on forcer à avoir un int?

    Cad a etr b sont des float.

    Je fais leur division a/b
    et je souhaite retourner un int:

    return(int(a/b));

    un truc comme ca (mais ca, ca fct pas).

    Merci encore

  12. #12
    NGY
    NGY est déconnecté
    Membre habitué
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 164
    Points
    164
    Par défaut
    Oui tu peux bien sûr.
    Par contre, il faut que tu définisses la règle à appliquer si la divison ne tombe pas juste (i.e. donne un nombre à virgule).

    Par exemple, tu peux caster ton résultat en int :

  13. #13
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    Citation Envoyé par adiGuba
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    float val = Division(15,0);
    if (val==Float.NaN) {
       System.exit(1);
    }
    C'est pas un peu barbare le System.exit(1) ? Car ca ferme violament l'appli sans avertir l'utilisateur de la raison, alors que cela pouvait etre facilement recupere en renvoyant une jolie exception.

  14. #14
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par benratti
    C'est pas un peu barbare le System.exit(1) ? Car ca ferme violament l'appli sans avertir l'utilisateur de la raison, alors que cela pouvait etre facilement recupere en renvoyant une jolie exception.
    Tout à fait d'accord... mais en même temps c'est ce qui était démandé :
    Citation Envoyé par Terminator
    Or moi, je désire juste afficher un message de division impossible et quitter sans rien afficher (ds le cas de division par 0)
    a++

  15. #15
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    Ca depend ce que tu entends par quitter : quitter la methode ou bien quitter l'appli ?

  16. #16
    Membre éprouvé
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Points : 1 166
    Points
    1 166
    Par défaut
    Quitter l'appli puisque Terminator semble satisfait de la réponse de adiGuba.

    Nas'

  17. #17
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    Dans ce cas, je prefere juste prevenir Terminator que ca peut etre tres desagreable pour l'utilisateur d'avoir ce genre de comportement... Imagines : tu es tranquillement en train d'utiliser une applie, et d'un seul coup l'appli se ferme sans prevenir ou simplement avec un message d'erreur "Division par zero" ... C'est un peu comme quand tu te retrouves devant l'ecran bleu de windows, tu ne sais pas ce qui en est la cause mais la seule chose que tu sais c'est que le message d'erreur ne te dit rien sur ce que tu as fait de mal et que ca ne t'informe pas sur la nature reel du probleme !

    Donc la seule chose que je dis : Attention, ce genre de comportement est de nature a enerver l'utilisateur du programme.

Discussions similaires

  1. Probleme try, catch, throw
    Par nico3 dans le forum Débuter
    Réponses: 11
    Dernier message: 10/12/2012, 18h21
  2. probleme try catch, Exception
    Par Slumpy dans le forum VB.NET
    Réponses: 9
    Dernier message: 23/03/2007, 15h51
  3. petit probleme de tri de date
    Par fscli dans le forum Access
    Réponses: 8
    Dernier message: 23/05/2006, 10h54
  4. petit probleme de tri
    Par progamer54 dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 16/05/2006, 08h47
  5. Probleme de try - catch
    Par Slumpy dans le forum Langage
    Réponses: 9
    Dernier message: 19/03/2006, 13h14

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