IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

StackOverFlowError. Soucis dans mon code (Lines of Action)


Sujet :

avec Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut StackOverFlowError. Soucis dans mon code (Lines of Action)
    Bonjour à tous,

    Voilà je dois faire le jeu "Lines of Action" comme projet. J'ai pas mal de soucis, et en plus je débute dans la programmation ainsi qu'en Java.

    J'ai donc tenté de faire une methode qui ... me dise si un joueur à gagné ou pas.

    Bon le code n'est pas forcément beau, j'ai tenté un "semi" backtracking (je n'en avais jamais fais auparavant et je sèche vraiment sur le code ...).

    Je sais qu'il doit y avoir une methode toute simple pour faire ça, et que j'ai du faire bien compliqué mais bon ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
     private int Back (ArrayList<Coordinate> ListPositionJ, int joueur, Coordinate coord, int nbr) {
         int k = 0;
         int r = coord.getRow();
         int c = coord.getColumn();
     
         for (Coordinate coordB : ListPositionJ) {
             if (coord.equals(coordB)) { k = 1; }
         }
         if (k == 0) { ListPositionJ.add(coord); nbr++;}
     
         if (inTab(r, (c+1))) {
             if (M[r][c+1] == joueur) {
                 coord = new Coordinate(r,(c+1));
                 Back(ListPositionJ, joueur, coord, nbr);
             }
         }
         if (inTab((r+1), (c+1))) {
             if (M[r+1][c+1] == joueur) {
                 coord = new Coordinate((r+1),(c+1));
                 Back(ListPositionJ, joueur, coord, nbr);
             }
         }
         if (inTab((r+1), c)) {
             if (M[r+1][c] == joueur) {
                 coord = new Coordinate((r+1),c);
                 Back(ListPositionJ, joueur, coord, nbr);
             }
         }
         if (inTab((r+1), (c-1))) {
             if (M[r+1][c-1] == joueur) {
                 coord = new Coordinate((r+1),(c-1));
                 Back(ListPositionJ, joueur, coord, nbr);
             }
         }
         if (inTab(r, (c-1))) {
             if (M[r][c-1] == joueur) {
                 coord = new Coordinate(r,(c-1));
                 Back(ListPositionJ, joueur, coord, nbr);
             }
         }
         if (inTab((r-1), (c-1))) {
             if (M[r-1][c-1] == joueur) {
                 coord = new Coordinate((r-1),(c-1));
                 Back(ListPositionJ, joueur, coord, nbr);
             }
         }
         if (inTab((r-1), c)) {
             if (M[r-1][c] == joueur) {
                 coord = new Coordinate((r-1),c);
                 Back(ListPositionJ, joueur, coord, nbr);
             }
         }
         if (inTab((r-1),(c+1))){
             if (M[r-1][c+1] == joueur) {
                 coord = new Coordinate((r-1),(c+1));
                 Back(ListPositionJ, joueur, coord, nbr);
             }
         }
         return nbr;
     }
     
    private int seTouche(Coordinate coord, int joueur){
        ListPositionJ = new ArrayList<Coordinate>();
        int k = 0;
        int nb = Back(ListPositionJ, joueur, coord, k);
     
        return nb;
    }
     
    private Coordinate CoordJ (int joueur) {
        int k = 0;
        Coordinate coord = null;
        for (int r = 0 ; r < M.length; r++) {
            for (int c = 0; c < M.length; c++) {
                if ((M[r][c] == joueur) && (k == 0)) { coord = new Coordinate(r,c); k = 1; }
            }
        }
        return coord;
        }
     
    /**
      * @pre  -
      * @post renvoie l'indication appropriée sur un éventuel gagnant:
      *       une des constantes X_WIN, O_WIN, PAT, NOBODY
      */
      private int winOrPat() {
      int nbB = nbJoueur(PLAYER_B);
      int nbN = nbJoueur(PLAYER_N);
     
      int ToF = seTouche(CoordJ(PLAYER_B), PLAYER_B);
      if (ToF == nbB) {return B_WIN;}
        else {
          ToF = seTouche(CoordJ(PLAYER_N), PLAYER_N);
          if (ToF == nbN) {return N_WIN;}
            else {
              return NOBODY;
            }
        }
     
      }
    En gros, WinOrPat appelle ma methode seTouche, avec comme coordonnée la première occurence de pion du joueur choisis (CoordJ), et dans seTouche, la methode Back est appellé, qui regarde tout autour d'elle si il y a un pion du joueur, et si c'est dans le tableau (inTab), et si c'est le cas, je réappelle récurcivement Back.

    Je me doutes que ca doit être moche, mais je débute

    Merci d'avance !

  2. #2
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    Peux tu aussi nous envoyer le message d'erreur
    + La ligne où l'erreur se déclenche ( C'est dans une des lignes du message d'erreur )
    Il était une fois [...] Et ils vécurent heureux et eurent beaucoup d'enfants!

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
            at java.util.ArrayList.get(ArrayList.java:322)
            at java.util.AbstractList$Itr.next(AbstractList.java:345)
            at lineofaction.LoaModel.Back(LoaModel.java:250)
            at lineofaction.LoaModel.Back(LoaModel.java:270)
            at lineofaction.LoaModel.Back(LoaModel.java:294)
            at lineofaction.LoaModel.Back(LoaModel.java:270)
            at lineofaction.LoaModel.Back(LoaModel.java:294)
            at lineofaction.LoaModel.Back(LoaModel.java:270)
            at lineofaction.LoaModel.Back(LoaModel.java:294)
            at lineofaction.LoaModel.Back(LoaModel.java:270)
            at lineofaction.LoaModel.Back(LoaModel.java:294)
            ...
    ligne 250 = for (Coordinate coordB : ListPositionJ) { (ligne 6 dans mon post), en gros si j'ai bien compris, il aime pas mon for each, j'ai remplacé le if par un System.out.Println() et là ça fonctionne plus de message d'erreur, mais j'ai besoin de mon if ... du coup j'ai tenté avec un iterator et le it.hastNext() it.next() et ça me remet le même message d'erreur

Discussions similaires

  1. [XL-2007] plusieurs souci dans mon code
    Par vincent59139 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/10/2013, 17h38
  2. petit souci dans mon code
    Par Cyang dans le forum Débuter
    Réponses: 3
    Dernier message: 05/07/2010, 12h30
  3. Réponses: 10
    Dernier message: 06/10/2005, 22h25
  4. Réponses: 1
    Dernier message: 21/02/2005, 12h40
  5. [langage] algo de bissection dans mon code
    Par killy dans le forum Langage
    Réponses: 5
    Dernier message: 19/01/2004, 18h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo