petit soucis avec le try catch

petit soucis avec le try catch - Java - Programmation

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.

Reply

Marsh Posté le 12-12-2009 à 21:27:23   

Reply

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 :
  1. try {
  2. // ici je fais un truc cochon qui va "throw"er une exception du type TrucCochonException
  3. } catch (TrucCochonException e) {
  4. // j'agis en conséquence du truc cochon
  5. } catch (TrucDegueuException e) {
  6. // j'agis en conséquence du truc dégueu
  7. }


 
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 :
  1. String maString = "kikoolol";
  2. if (maString.length() > 2) {
  3. throw new Exception("Y'a beaucoup de lettres dis donc" );
  4. }


- 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).

Reply

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.

Reply

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.
 
Si tu veux analyser le contenu de ta String, regarde du côté des expressions régulières.


une expression régulière pour ça ? mais ça va pas non ? [:mlc]
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

Reply

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!

Reply

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed