Exercice 4.1.3 menu

Modérateurs : F. Barthélemy, eric.soutil

Verrouillé
Jambon14
Messages : 23
Inscription : 25 oct. 2016 21:26

Exercice 4.1.3 menu

Message par Jambon14 » 30 oct. 2016 9:09

Bonjour

J'ai un souci sur l'exercice Exercice 4.1.3 menu

Dans le cas ou un utilisateur ne saisi rien ou autre chose qu'un nombre une exception de type TerminalException est signalée
hors quand je souhaite lever l’exception Eclipse m'indique qu'il n'y a pas de constructeur pour cette classe.

Pour le coup j'ai un doute car théoriquement il y a tjrs un constructeur par défaut normalement.... si j'ai bien lu le cours.... non?

Si quelqu'un peut m'éclairer sur TerminalException ... j'ai lu que par convention quand on crée sa propre classe Exception on nomme
MaClassException donc Terminal hérite de la classe Exception....

Dans mon résonnement je me dis que cette classe TerminalException ne me permet pas d'atteindre la classe Exception "native" de java
elle se déclenche si un utilisateur ne saisi rien ... et quand je relis l’annoncé de l'exercice Exercice 4.1.1 exceptions prédéfinies c'est bien le cas... mais je me m'explique pas pourquoi j'ai ce problème de constructeur non déclaré sur cette classe...

Merki!

V.B.fod31
Messages : 83
Inscription : 10 févr. 2014 12:58

Re: Exercice 4.1.3 menu

Message par V.B.fod31 » 31 oct. 2016 14:57

Bonjour,
J'en suis au même point que toi... Je ne sais pas si je peux répondre à ta question.
Dans Terminal.class, il y a
class TerminalException extends RuntimeException

As-tu jeté un œil sur la doc de la classe RuntimeException ?
http://docs.oracle.com/javase/7/docs/ap ... ption.html

Je ne sais pas si j'ai bien interprété ce que fait cette classe :
class TerminalException extends RuntimeException
{
Exception ex; // objet de la classe Exception

//Constructeur qui prend en paramettre un objet de la classe Exception
TerminalException(Exception exception)
{
ex = exception;
}
}

De plus la fonction lireInt() utilise la fonction lireString()
Je te laisse faire la trace car c'est trop long à écrire...
public static int lireInt()
{
int nombre=0;

try
{
nombre=Integer.parseInt(
lireString() //il faut regarder ce que fait cette fonction
);
}
catch (NumberFormatException exception)
{
exceptionHandler(exception);
}

return nombre ;
}

Bref il y a beaucoup d'exceptions dans ce code.... De quoi plancher pour en savoir plus sur les exceptions lol ;)

Mais je suppose que pour cette exercice on ne doit pas utiliser la classe TerminalException car dans l’énoncé il est dit :
Pour simplifier, vous pouvez vous limiter à n<10, ce qui permet de ne saisir qu’un caractère au moyen de Terminal.lireChar()

J'ai donc testé si le char entré est un nombre et géré les autres erreurs énoncées dans la question 1.

J’espère t'avoir un peu aidé quand même :)

Jambon14
Messages : 23
Inscription : 25 oct. 2016 21:26

Re: Exercice 4.1.3 menu

Message par Jambon14 » 02 nov. 2016 11:42

Je vais regarder cela de plus près.. :) Thxs!

V.B.fod31
Messages : 83
Inscription : 10 févr. 2014 12:58

Re: Exercice 4.1.3 menu

Message par V.B.fod31 » 02 nov. 2016 13:57

Jambon14 a écrit :quand je souhaite lever l’exception Eclipse m'indique qu'il n'y a pas de constructeur pour cette classe.
j'utilise blueJ et j'ai parfois des petits bugs lors de la compilation ou execution...
Dans ce cas pour savoir si l'erreur vient du code ou de blueJ, je compile et j'execute directement en console.

Souvent, ça marche en console :) Je m’évite des arrachages de cheveux inutiles lol

Donc pour être sûre qu'il s'agit d'une erreur de ton code et non un bug d'Eclipe je te conseille de le faire avec la console :)

avec les commandes
javac MaClasse.java //compile
java MaClass // exécute

Jambon14
Messages : 23
Inscription : 25 oct. 2016 21:26

Re: Exercice 4.1.3 menu

Message par Jambon14 » 02 nov. 2016 17:50

Re j'ai trouvé une solution merci pour tes conseils :) cela m'a permis de persévérer

en fait je suis parti sur une saisie avec des String plutôt qu'en Int ou Char (arffff je viens de comprendre le "vous pouvez vous limiter à n<10" car mon menu va de 1 à 10
hors en Char ... 10 sa passe pas) :)

Bref une fois mes variables fixées en String je n'ai eu qu'à traiter les variables avec des méthodes d'objets

Pour savoir si l'utilisateur a saisi directement entrée ou a saisi une lettre j'utilise
(n.equals("") || !Character.isDigit(n.charAt(0))) et je lèvre une exception qui hérite de la classe NumberFormatException

enfin pour traiter les données String en Integer (Int) j'utilise Integer.parseInt(n) (n etant le String saisie par l'utilisateur)

En tout cas je lance et j'attrape bien les erreurs...

Jeanbon

Verrouillé

Qui est en ligne ?

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité