Erreur sur les Exceptions personnalisées en JAVA
Résolu
Anouchka2586
Messages postés
50
Date d'inscription
Statut
Membre
Dernière intervention
-
Anouchka2586 Messages postés 50 Date d'inscription Statut Membre Dernière intervention -
Anouchka2586 Messages postés 50 Date d'inscription Statut Membre Dernière intervention -
Bonjour
Je ne comprend pa l'erreur que j'obtient avec l'exception SalarieException :
L'erreur se trouve à la ligne 24 à
Je ne comprend pa l'erreur que j'obtient avec l'exception SalarieException :
package fr.xxxx.yyyy; import java.util.Enumeration; import java.util.Hashtable; import fr.xxxx.exceptions.SalarieException; public class Application { public static void main(String[] args) throws SalarieException { Hashtable dict = new Hashtable(); Salarie s; try { s = new Salarie(5, 8, 14, "yyyyyyyyyyyyyyyyy", 1500); Integer key = new Integer(s.getM_nMatricule()); dict.put(key, s); s = new Salarie(3, 1, 20, "Isodore DUMARC", 10000); dict.put(key, s); s = new Commercial(6, 2, 30, "Mathieu LEBLOND", -17000, 52000, 9); dict.put(key, s); } catch (SalarieException se) { System.err.println(se); } // Ici on ajoute chaque élement dict.element() à l'Enumeration for (Enumeration e = dict.elements(); e.hasMoreElements();) { Salarie sal = (Salarie) e.nextElement(); System.out.println(sal); System.out.println(sal.calculSalaire()); } } }
package fr.xxxx.exceptions; import fr.xxxx.yyyy.Salarie; public class SalarieException extends Exception { public SalarieException(Salarie salarie) { super(); } public String toString(){ return super.toString() + "\nLe salaire ne peut être que positif."; } }
L'erreur se trouve à la ligne 24 à
catch (SalarieException se)
A voir également:
- Erreur sur les Exceptions personnalisées en JAVA
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
5 réponses
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; }
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.
Ok mais quand je met un salaire négatif, l'exception SalarieException n'est pas levée. Aucun message d'erreur
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.
ç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
"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
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 :