Problème try - catch dans une boucle while

Résolu
karemkadidola Messages postés 9 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 21 février 2012 - 11 avril 2010 à 15:03
karemkadidola Messages postés 9 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 21 février 2012 - 17 avril 2010 à 16:03

public void jouerUnCoup (List positions)throws CoupInvalideException,
   CloneNotSupportedException{

       boolean erreur = true;
       int chiffreTest = 0;

       CoupFactory usineCoup = new CoupFactory();
       Coup coupAJouer;

       while (erreur) {
   try{
       coupAJouer = usineCoup.créerCoup(positions,this.état);
       coupAJouer.jouer(this.état);
       chiffreTest = 1;
   } catch(IllegalArgumentException i){
       System.out.println(i.getMessage());
       positions = this.état.getJoueurCourant().choisirMouvements(this.état);
       coupAJouer = usineCoup.créerCoup(positions,this.état);
       coupAJouer.jouer(this.état);
       chiffreTest = 1;
   }catch(CoupInvalideException c){
       System.out.println(c.getMessage());
       positions = this.état.getJoueurCourant().choisirMouvements(this.état);
       coupAJouer = usineCoup.créerCoup(positions,this.état);
       coupAJouer.jouer(this.état);
       chiffreTest = 1;
   }finally{
       if (chiffreTest==0){
   //tous les coups étaient invalides
   positions = this.état.getJoueurCourant().choisirMouvements(this.état);
       }else{
   erreur = false;
       }
   }
       }
   }


j'ai un problème avec un try catch que j'engloble dans une boucle tant que (comme on peut le voir dans le code)
c code fait partie d'un package qui implemente un jeu de dame.
brève explication; il y un joueurConsole qui doit entre son coup à jouer à partir du clavier. la classe coup factory construit un coup selon la liste de position que le jouerConsole renvoie (le coup constuit par coupFactory sera soit un DéplacementPion soit une PrisePion-ils héritent de coup en effet) le coup constuit possède une methode qui s'appelle jouer susceptible de lance soit un coupInvalideException soit un illegalArgumentexcption. ici je vous présente la méthode jouerUnCoup qui pose problème et que j'ai tirée de la classe Jeu. voilà en bref le résumé.
mon problème est que je veux retourner chaque fois dans boucle while pour redemander au jouerConsole une nouvelle liste de position afin de rejouer un coup après un coup déclaré invalide...et ça tant qu'un coup ne sera pas valide mais ça ne marche qu'au maximum (2 fois) avec deux coupInvalides successifs. je ne retourne pas du tout dans ma boucle comme si le fait d'avoir lancée l'exception m'empeche de retourner dans le "tant que" quelqu'un pourra t il me dire la raison de ce problème?? ça fait plusieurs jours que je cherche..merci d'avance à vous...

2 réponses

cs_vpoyo Messages postés 363 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 avril 2010 6
11 avril 2010 à 16:48
Bonjour,

En fait l'exception est levé par la méthode "jouer".

le problème c'est que dans ton catch tu rappelles cette méthode, et qui re-provoque une erreur. comme dans le bloc catch il n'y a pas un autre bloc try, l'erreur te fait sortir de la boucle et même de la méthode "jouer un coup".

ton algo devrait être :
while (erreur){
    try{
        coupAJouer =  usineCoup.créerCoup(positions,this.état);
        coupAJouer.jouer(this.état);
        erreur = false;
    }
    catch(Exception e){
        System.out.println(c.getMessage());
        positions = this.état.getJoueurCourant().choisirMouvements(this.état);
        erreur=true;
    }
}


en résumé :
je joue mon coup, s'il y a une erreur, j'affiche l'erreur, je demande une nouvelle position, et je flag comme quoi il y a eu une erreur ce qui me permettra de boucler.
Pour faire plus simple, j'ai mis qu'un type d'Exception.
Attention, la demande de position pourrait très bien renvoyée elle aussi une erreur, et tu retomberais sur le même problème.
1