Erreur sur les Exceptions personnalisées en JAVA
Résolu/Fermé
Anouchka2586
Messages postés
50
Date d'inscription
vendredi 10 octobre 2014
Statut
Membre
Dernière intervention
20 mars 2022
-
Modifié le 19 juil. 2020 à 10:14
Anouchka2586 Messages postés 50 Date d'inscription vendredi 10 octobre 2014 Statut Membre Dernière intervention 20 mars 2022 - 19 juil. 2020 à 23:41
Anouchka2586 Messages postés 50 Date d'inscription vendredi 10 octobre 2014 Statut Membre Dernière intervention 20 mars 2022 - 19 juil. 2020 à 23:41
A voir également:
- Erreur sur les Exceptions personnalisées en JAVA
- Erreur 0x80070643 - Accueil - Windows
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
5 réponses
Anouchka2586
Messages postés
50
Date d'inscription
vendredi 10 octobre 2014
Statut
Membre
Dernière intervention
20 mars 2022
5
Modifié le 19 juil. 2020 à 11:59
Modifié le 19 juil. 2020 à 11:59
Dans la classe Salarie :
Dans la classe Commercial:
public Salarie(int m_nMatricule, int m_nCategorie, int m_nService, String m_strNom, double m_dSalaire) throws SalarieException { super(); System.out.println("Création du salarié : "+m_strNom); this.m_nMatricule = m_nMatricule; this.m_nCategorie = m_nCategorie; this.m_nService = m_nService; this.m_strNom = m_strNom; if(this.m_dSalaire < 0) { SalarieException se = new SalarieException(this); } else this.m_dSalaire = m_dSalaire; this.m_nCount = m_nCount + 1; }
Dans la classe Commercial:
public Commercial(int nMat, int nCatg, int nServ, String strNom, double dSal, double dChiffre, int dCommission) throws SalarieException { super(nMat, nCatg, nServ, strNom, dSal); this.m_dChiffreAffaire = dChiffre; this.m_pcCommission = dCommission; }
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
19 juil. 2020 à 10:27
19 juil. 2020 à 10:27
Bonjour,
Tu ne peux pas catch une SalarieException si dans le bloc try tu n'appelles aucun code qui throws cette SalarieException.
Tu ne nous as pas copier le code des classes Salarie et Commercial donc on ne peut pas voir comment elles sont faites, mais leurs constructeurs devraient throws SalarieException pour que ton try/catch ait un sens.
Remarque : Hashtable et Enumeration sont de très vieilles classes Java 1.0 (1996) qui ne devraient plus être utilisées depuis Java 1.2 (1998) quand ont été ajoutées HashMap et Iterator.
Tu as donc plus de 20 ans de retard sur la technologie Java et il ne m'apparaît pas judicieux de coder en 2020 avec un langage Java aussi rustique qu'il ne l'était il y a 20 ans.
Tu ne peux pas catch une SalarieException si dans le bloc try tu n'appelles aucun code qui throws cette SalarieException.
Tu ne nous as pas copier le code des classes Salarie et Commercial donc on ne peut pas voir comment elles sont faites, mais leurs constructeurs devraient throws SalarieException pour que ton try/catch ait un sens.
public Salarie(int a, int b, int c, String d, int e) throws SalarieException { if (...) throw new SalarieException(this); }
Remarque : Hashtable et Enumeration sont de très vieilles classes Java 1.0 (1996) qui ne devraient plus être utilisées depuis Java 1.2 (1998) quand ont été ajoutées HashMap et Iterator.
Tu as donc plus de 20 ans de retard sur la technologie Java et il ne m'apparaît pas judicieux de coder en 2020 avec un langage Java aussi rustique qu'il ne l'était il y a 20 ans.
Anouchka2586
Messages postés
50
Date d'inscription
vendredi 10 octobre 2014
Statut
Membre
Dernière intervention
20 mars 2022
5
19 juil. 2020 à 14:52
19 juil. 2020 à 14:52
Ok mais quand je met un salaire négatif, l'exception SalarieException n'est pas levée. Aucun message d'erreur
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
19 juil. 2020 à 15:39
19 juil. 2020 à 15:39
C'est parce que au moment du test
Il faudrait soit faire l'affectation avant :
Soit faire la comparaison sur la valeur passée en paramètre :
La première manière a l'avantage d'avoir un
if(this.m_dSalaire < 0)la valeur
this.m_dSalairevaut zéro (valeur par défaut) car l'affectation
this.m_dSalaire = m_dSalairen'est pas faite.
Il faudrait soit faire l'affectation avant :
this.m_dSalaire = m_dSalaire; if(this.m_dSalaire < 0) { throw new SalarieException(this); }
Soit faire la comparaison sur la valeur passée en paramètre :
if (m_dSalaire < 0) { throw new SalarieException(this); } else this.m_dSalaire = m_dSalaire;
La première manière a l'avantage d'avoir un
new SalarieException(this)avec this qui contient la valeur du salaire qui pose problème, pour un meilleur traitement de l'exception derrière, mais si la deuxième manière est plus cohérente car elle bloque complètement d'avoir un salaire négatif.
Anouchka2586
Messages postés
50
Date d'inscription
vendredi 10 octobre 2014
Statut
Membre
Dernière intervention
20 mars 2022
5
19 juil. 2020 à 19:40
19 juil. 2020 à 19:40
ça ne marche pas, déjà il souligne en rouge quand je met throw à throw new SalarieException(this);
Pour votre 2ème proposition cad :
Il me renvoit juste le salaire est 0 si je le met en négatif mais ne retourne pas la valeur de toString().
ps: la premièreproposition ne fonctionne pas, il affiche quand même le salaire négatif
Pour votre 2ème proposition cad :
if (m_dSalaire < 0) {
throw new SalarieException(this);
} else this.m_dSalaire = m_dSalaire;
Il me renvoit juste le salaire est 0 si je le met en négatif mais ne retourne pas la valeur de toString().
ps: la premièreproposition ne fonctionne pas, il affiche quand même le salaire négatif
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
19 juil. 2020 à 21:22
19 juil. 2020 à 21:22
"déjà il souligne en rouge quand je met throw à throw new SalarieException(this);"
Souligné en rouge signifie qu'il y a une erreur, mais il faut survoler le code correspondant pour voir s'afficher le détail de l'erreur, ce qui aide généralement à la corriger, notamment grâce aux éventuelles propositions qui s'affichent.
Exemple :
Avec les différentes parties de code que j'ai recombiné suite à nos échanges, j'ai un programme de test qui fonctionne, que ce soit avec l'une ou l'autre des deux méthodes indiquées.
Souligné en rouge signifie qu'il y a une erreur, mais il faut survoler le code correspondant pour voir s'afficher le détail de l'erreur, ce qui aide généralement à la corriger, notamment grâce aux éventuelles propositions qui s'affichent.
Exemple :
Avec les différentes parties de code que j'ai recombiné suite à nos échanges, j'ai un programme de test qui fonctionne, que ce soit avec l'une ou l'autre des deux méthodes indiquées.
public Salarie(int m_nMatricule, int m_nCategorie, int m_nService, String m_strNom, double m_dSalaire) throws SalarieException { super(); System.out.println("Création du salarié : "+m_strNom); this.m_nMatricule = m_nMatricule; this.m_nCategorie = m_nCategorie; this.m_nService = m_nService; this.m_strNom = m_strNom; if (m_dSalaire < 0) { throw new SalarieException(this); } else { this.m_dSalaire = m_dSalaire; } this.m_nCount = m_nCount + 1; }
public Salarie(int m_nMatricule, int m_nCategorie, int m_nService, String m_strNom, double m_dSalaire) throws SalarieException { super(); System.out.println("Création du salarié : "+m_strNom); this.m_nMatricule = m_nMatricule; this.m_nCategorie = m_nCategorie; this.m_nService = m_nService; this.m_strNom = m_strNom; this.m_dSalaire = m_dSalaire; if (this.m_dSalaire < 0) { throw new SalarieException(this); } this.m_nCount = m_nCount + 1; }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Anouchka2586
Messages postés
50
Date d'inscription
vendredi 10 octobre 2014
Statut
Membre
Dernière intervention
20 mars 2022
5
19 juil. 2020 à 23:41
19 juil. 2020 à 23:41
Ah oui ça marche c'est moi qui avais ajouté un mauvais code, merci
Modifié le 19 juil. 2020 à 12:09
Alors quel est le message de l'erreur que tu as ?
Remarque : pour lever une exception il ne faut pas juste faire un new, il faut surtout faire un throw :