Problème try - catch dans une boucle while [Résolu]

karemkadidola 10 Messages postés mardi 6 octobre 2009Date d'inscription 21 février 2012 Dernière intervention - 11 avril 2010 à 15:03 - Dernière réponse : karemkadidola 10 Messages postés mardi 6 octobre 2009Date d'inscription 21 février 2012 Dernière intervention
- 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...
Afficher la suite 

2 réponses

Répondre au sujet
cs_vpoyo 363 Messages postés vendredi 14 février 2003Date d'inscription 20 avril 2010 Dernière intervention - 11 avril 2010 à 16:48
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_vpoyo
karemkadidola 10 Messages postés mardi 6 octobre 2009Date d'inscription 21 février 2012 Dernière intervention - 17 avril 2010 à 16:03
0
Utile
Merci beaucoup très cher vpoyo, j'ai trainé de te remercier, le message était tombé dans mon junkmail et je viens seulement de le recupérer, en effet j'avais déjà trouvé la solution et c'est très exactement ce que vous venez de me dire là..mais j'ai trop galerer avant car je ne comprenais pas du tout ce "pouvoir supreme qui me fesait quitter le tant que..." encore une fois merci pour le temps accordé sur mon problème...
Commenter la réponse de karemkadidola

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.