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

Langage Java Discussion :

Création d'une classe-liste et surcharge de get()


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 36
    Par défaut Création d'une classe-liste et surcharge de get()
    Bonjour à tous,

    Dans le cadre d'un projet informatique, je dois créer un jeu de cartes. Pour cela, j'ai écrit plusieurs classes dont la classe Carte qui spécifie les attributs de chaque carte (famille et numéro) et la classe Paquet qui est chargée de regrouper la totalité de mes cartes. Ma classe paquet possède donc un constructeur qui est Paquet() où j'ajoute à la liste monPaquet toutes les cartes nécessaires.
    J'ai créé une méthode qui est get() et qui est la suivante:

    Carte get(int i){
    return this.get(i);
    }.

    Le problème est que, quand dans ma classe principale je lance le programme où j'ai construit ma méthode distribue (pour distribuer les cartes aux deux joueurs), j'ai une erreur de StackOverFlow que je ne comprends pas. J'ai lu qu'il s'agissait d'une erreur liée à une mauvaise récursivité (la fonction s'appelle elle-même). Comment faire pour avoir ce get qui me permettrait d'avoir la carte une fois qu'elle est sortie du paquet?

    Je pense que c'est lié au fait que dans la classe Paquet le get est rattaché à une liste (c'est comme ça que j'ai défini monPaquet) alors que dans la classe principale j'ai défini un Paquet et la méthode ne marche plus. Bref, je suis un peu perdu ...

    Merci d'avance

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 586
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 586
    Par défaut
    Citation Envoyé par Xenthys Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Carte get(int i){
    	return this.get(i);
    	}
    Cette méthode s'appelle elle-même. Donc oui, c'est une récursion et elle est mal pensée.
    Chaque fois que tu l'appelleras tu auras le problème dont tu parles.
    Si tu n'as pas le problème c'est que tu n'appelles pas cette méthode.

    Pour le reste, tu n'as pas montré de code, donc on sait pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 36
    Par défaut
    Excuse-moi je ne comprends pas le terme codec. Tu veux que je poste la totalité du code ?
    Voici la méthode distribue qui appelle la classe Paquet:
    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
    void distribueDebut(){
    			copiePaquet=monPaquet;
    			for(int i=0; i<5;i++){
    				int j= (int) Math.floor(Math.random()*(53-i));
    			a=monPaquet.get(j);
    			Joueur1.recoit(a);
    			monPaquet.remove(j);
    			CartesGauche[i]= new JButton(new ImageIcon("/Schotten totten/"+b.getClan()+b.getNumero()+".GIF"));
    			}
     
    			for(int k=6;k<12;k++){
    				int l= (int) Math.floor(Math.random()*(47-k));
    			b=copiePaquet.get(l);
    			Joueur2.recoit(b);
    			monPaquet.remove(l);
    			CartesDroite[k]=new JButton(new ImageIcon("/Schotten totten/"+b.getClan()+b.getNumero()+".GIF")); 
     
    			}
    			}

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Il a dit code, pas codec.

    Pour le reste, tu crée un méthode qui s'appelle elle même. La présence du this n'y change rien :/ Le this est toujours implicite et ne sert à distinguer qu'en cas d'ambiguité.

    JE pense que le code correct est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Carte get(int it){
        return monPaquet.get(i);
    }
    Mais difficile d'en être certain vu qu'on a pas le code de ta classe Paquet :/

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 36
    Par défaut
    Merci, j'avais en effet mal lu . Ça marche avec cette nouvelle méthode. ;-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Création d'une combobox liste déroulante
    Par ThieBEN dans le forum IHM
    Réponses: 14
    Dernier message: 15/11/2007, 10h52
  2. création d'une radio liste incluant une variable
    Par lestathor dans le forum Langage
    Réponses: 1
    Dernier message: 15/05/2007, 20h56
  3. Réponses: 3
    Dernier message: 06/05/2007, 20h46
  4. [C++] Création d'une classe dans un fichier
    Par Pfeffer dans le forum C++Builder
    Réponses: 1
    Dernier message: 02/05/2007, 16h49
  5. Création d'une class contenant un TEdit (Débutant)
    Par Dereck07 dans le forum Delphi
    Réponses: 5
    Dernier message: 01/05/2007, 18h02

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