petit soucis avec le try catch - Java - Programmation
Marsh Posté le 12-12-2009 à 22:40:43
Un try/catch permet d'effectuer une(des) manoeuvre(s) (située(s) dans la portée du try) susceptible(s) de provoquer une exception (on "tombe" alors dans la portée du catch). Selon l'exception, on peut alors agir en conséquence.
Code :
|
Comme tu le vois, on n'a pas nécessairement besoin d'un do/while pour utiliser un try/catch.
Ce que tu peux faire :
- dans le do{}, tu fais le try/catch qui va récupérer la String et l'analyser.
- Si l'analyse dit que la String saisie est incorrecte, tu throw une Exception. Exemple alakon pour lâcher une exception :
Code :
|
- Par conséquent, le programme ira dans la portée du catch{} (tu diras à l'utilisateur que la String est incorrecte).
- A la fin du catch{} : le do{} pourra continuer.
Généralement, on se crée une classe perso qui hérite de la classe java.lang.Exception pour thrower sa propre Exception (pour savoir exactement quel type d'exception a été rencontrée dans le programme).
Marsh Posté le 12-12-2009 à 22:43:03
Ah oups, j'avais compris que tu devais utiliser un try/catch avec ton do/while ! Bref, try/catch permet d'intercepter une exception.
Si tu veux analyser le contenu de ta String, regarde du côté des expressions régulières.
Marsh Posté le 13-12-2009 à 10:36:35
Siluro a écrit : Ah oups, j'avais compris que tu devais utiliser un try/catch avec ton do/while ! Bref, try/catch permet d'intercepter une exception. |
une expression régulière pour ça ? mais ça va pas non ?
un StringTokenizer suffira largement, suivi d'un test pour chaque token extrait, afin de voir s'il est compris entre 0 et 49 et puis voilà.
en tout cas, les exceptions n'ont strictement rien à voir là dedans
Marsh Posté le 13-12-2009 à 13:58:03
bon alors j'ai suivi ton conseil Harkonnen (enfin il me semble ) donc voila ce que j'ai écrit (mais pas encore testé) :
do {
if (peutmanger != true) {
System.out.println ("Où voulez vous le déplacer?" ) ;
}
else if {
System.out.println ("Si vous voulez manger un pion, donnez la suite complete des différentes pauses sur le plateau de votre pion (séparée par une virgule), sinon donnez juste la position d'arrivée;" ) ;
}
arrivee = //lire ;
if (arrivee.length () = 0) {
valide = false ;
}
else if {
arrivee.new(arrivee) ; // convertit en StringTOkenizer
taille = arrivee.countTokens () ; // donne le nb de token
int i = 0 ;
do {
i++ ;
token = arrivee.nextTokenDelim("," );
tokenInt = Integer.parseInt (token) ;
if (tokenInt < 0 || tokenInt > 49) {
valide = false ;
}
else if {
valide = true ;
}
} while (valide = true || i < taille) ;
}
} while (valide = false) ;
par contre je ne suis pas sur pour le countToken () je n'ai pas précisé le separateur est-ce juste si c'est une virgule et non pas un par défaut (espace tab ou retour à la ligne il me semble)?
Merci pour votre aide!
Marsh Posté le 13-12-2009 à 16:28:54
Tu ferais mieux de lever une NumberFormatException et l'intercepter au lieu d'utiliser un booléen "valide". De toutes manières, Integer.parseInt() est susceptible de lever cette exception donc tu dois quand même l'intercepter.
Marsh Posté le 12-12-2009 à 21:27:23
Bonjour, je vais vous exposer mon problème.
j'ai une boucle do while qui demande à l'utilisateur de saisir un string tant que le string n'est pas valide.
Ce string doit être de la forme "0,4,26" sachant que je ne connais pas à l'avance la taille qu'il aura, mais je peux la récuperer en faisant" taille = monString.length () ;"
entre chaque virgule il doit y avoir soit un caractère compris entre 0 et 9 soit du coup deux caractères compris entre 10 et 49; de telle sorte que l'utilisateur ne donne que des valeurs comprises entre 0 et 49
Je pensais faire un try catch mais je n'en ai jamais fait et je ne vois pas du tout quoi mettre dedans.
et l'utilisation d'un boucle do while est-elle nécessaire avec un try catch?
Merci d'avances pour vos réponses.