Java Exception

Résolu
keurdange Messages postés 720 Date d'inscription   Statut Membre Dernière intervention   -  
keurdange Messages postés 720 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'aimerais faire un programme qui gère les exceptions (dans mon cas ci dessous une division par zéro. Si c'est le cas, il fait appel à une méthode pour refaire la division) mais il y a toujours une erreurs comme indiqué ci dessous:

import java.util.Scanner;
public class Division {
public static void MaDivision(float a,float b) throws DivisionZero
{
float prod = a/b; throw new DivisionZero();
//l'erreur se trouve ici. je pense que c'est le fait que DivisionZero n'est pas ici dans la classe Division Zero mais comment déclarer l'exception alors??
}
public static void main(String args[]) throws DivisionZero
{
float x,y;
Division div=new Division();
Scanner ngal=new Scanner(System.in);
System.out.println("Entrez les valeurs");
x=ngal.nextFloat();
y=ngal.nextFloat();
div.MaDivision(x, y);
}

class DivisionZero extends Exception{
public DivisionZero() throws DivisionZero
{
Division div=new Division();
Scanner Ngal=new Scanner(System.in);
System.out.println("Attention, division par zéro impossible\nVeuillez rentrer les nombres");
float a=Ngal.nextFloat();
float b=Ngal.nextFloat();
div.MaDivision(a, b);
}

}


}

N.B: je sais le faire avec try() catch(ArithmeticException e) mais je veux encore plus gérer l'exception et créer par moi même mon exception.

Merci.


A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Le problème vient que tu as déclaré ta classe DivisionZero à l'intérieur de la classe Division.
Pour corriger le problème tu dois "au choix" déclarer la classe à part, ou la déclarer à l'intérieur mais static. Dans les deux cas une encapsulation public ne ferait pas de mal ;-)
La confiance n'exclut pas le contrôle
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Cependant : une exception n'est rien censé faire à part indiquer qu'elle existe.
Faire un traitement dans le constructeur de l'exception est pour le moins... moche !

En plus tu fais un throws DivisionZero sur le constructeur de l'exception DivisionZero, c'est un peu spécial quand même... D'autant que le traitement est spécifique à une seule des tes méthodes alors qu'elle devrait au moins pouvoir être utilisée sur toutes les méthodes de ta classe et de ses classes filles (notions de réutilisabilité en conception objet)

Remarque (je n'en finis plus ^^) : quitte à hériter d'une exception, autant hériter de ArithmeticException, sans oublier de faire un appel à super.

Evidemment l'intérêt est très limité ici, mais même pour l'exemple autant faire du code qui ressemble à peu près à ce que tu pourrais avoir à faire un jour en vrai ;-)

public class Division
{
	// ...

	public static class DivisionZero extends ArithmeticException
	{
		private static final long serialVersionUID = 1L;
	
		public DivisionZero()
		{
			super("Division par zéro impossible");
		}
	}
}
0
keurdange Messages postés 720 Date d'inscription   Statut Membre Dernière intervention   231
 
Merci, ca marche
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Remarque ; avec les ArithmeticException, et les RuntimeException en général, tu n'es pas obligé de faire des try catch ou des throws partout (de la même manière que tu ne mets pas de try à chaque fois que tu fais a/b ^^)
0
keurdange Messages postés 720 Date d'inscription   Statut Membre Dernière intervention   231
 
j'ai déplacé l'exception pour corriger le problème mais j'ai pas compris ton private static final long serialVersionUID = 1L; surtout l'initialisation à 1L.

Merci
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Les exceptions implémentent l'interface Serializable qui demande un numéro de version.
Par défaut Eclipse me le met directement à 1 (le L pour dire que c'est de type long)
0