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

Collection et Stream Java Discussion :

Problème pour remplir un tableau d'objet


Sujet :

Collection et Stream Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 14
    Points : 6
    Points
    6
    Par défaut Problème pour remplir un tableau d'objet
    Bonjour, je suis débutant en Java. Je dois faire un Poker et je rencontre un problème avec ma classe JeuxDeCarte et en particulier une méthode qui me permet de remplir mon tableau d'objet Carte.
    Voici le code de ma méthode :

    public void remplirTab(Carte c){

    //Je génère une carte aléatoirement
    c.NewCarte();
    System.out.println(c.toString());
    //Je range ce nombre dans un tableau de carte
    tabCarte[0] = c;

    for (int i = 1; i<tabCarte.length;i++){
    c.NewCarte();
    tabCarte[i] = c;
    System.out.println("Valeur du tableau "+i+" "+tabCarte[i].toString());
    }
    for (int f = 0; f < tabCarte.length ; f++)System.out.println("Carte n°"+f+" "+tabCarte[f].toString());
    }
    Mon problème est le suivant : lorsque je range mes cartes générés dans ma 1er boucle for et que j'affiche le contenu du tableau, tout va bien, une fois sortie de la boucle, je ré affiche l'ensemble du tableau et c'est la que ça ne va pas : toute les valeurs du tableau de carte ont la dernière valeur de la dernière carte généré...

    ce qui me donne le résultat suivant :
    E:\src\Poker>java JeuxDeCar
    Ma carte est un dame de coeur

    Valeur du tableau 1 Ma carte est un trois de carreau

    Valeur du tableau 2 Ma carte est un cinq de carreau

    Valeur du tableau 3 Ma carte est un valet de pique
    [...]
    Valeur du tableau 50 Ma carte est un cinq de trefle

    Valeur du tableau 51 Ma carte est un valet de carreau

    Carte n░0 Ma carte est un valet de carreau

    Carte n░1 Ma carte est un valet de carreau

    Carte n░2 Ma carte est un valet de carreau
    [...]
    Carte n░50 Ma carte est un valet de carreau

    Carte n░51 Ma carte est un valet de carreau


    E:\src\Poker>
    Je vous remercie pour votre aide précieuse !!!

  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
    Effectivement... It's very strange
    Tu peux nous envoyer tous ton code.
    L'erreur doit se situer ailleurs mais elle se répercute dans tous le programme.
    Peut être ta méthode newCarte()?
    Ou alors j'ai pas bien regarder.

    Envoie quand tout ton code
    Il était une fois [...] Et ils vécurent heureux et eurent beaucoup d'enfants!

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Voici ma classe Carte.java :

    import java.util.*;

    public class Carte{
    //Mes attributs
    private String[] tabCouleur = {"pique", "carreau","coeur","trefle"};
    private String[] tabValeur = {"as","deux","trois","quatre","cinq","six","sept","huit","neuf","dix","valet","dame","roi"};
    private int couleur, valeur;

    //CONSTRUCTEUR PRIMITIF
    public Carte(){
    int couleur = 0;
    int valeur = 0;
    }

    public Carte(int V, int C){
    int couleur = C;
    int valeur = V;
    }

    Carte NewCarte(){
    Random randomGeneCouleur = new Random();
    Random randomGeneValeur = new Random();
    couleur = randomGeneCouleur.nextInt(4);
    valeur = randomGeneValeur.nextInt(13);
    Carte newCarte = new Carte(this.valeur, this.couleur);

    return newCarte;
    }


    //*****************************************************************************************
    // OBSERVATEUR
    //*****************************************************************************************
    int getCouleur(){
    return this.couleur;
    }

    int getValeur(){
    return this.valeur;
    }


    //*****************************************************************************************
    // MUTATEURS
    //*****************************************************************************************

    void setCouleur(int C){
    this.couleur = C;
    }

    void setValeur(int V){
    this.valeur = V;
    }
    //*****************************************************************************************
    // METHODES
    //*****************************************************************************************

    public String toString(){
    return ("Ma carte est un "+tabValeur[getValeur()]+" de "+tabCouleur[getCouleur()]+"\n");
    }

    public boolean equals(Carte c){
    return this.couleur == c.couleur & this.valeur == c.valeur;
    }

    public static void test(){
    //test de création d'une carte définie
    Carte c1 = new Carte(3,5);
    System.out.println(c1.toString());

    //test de création d'une carte aléatoire
    Carte c2 = new Carte();
    c2.NewCarte();
    System.out.println(c2.toString());

    //Test de comparaison de 2 cartes
    if(c1.equals(c2) == true) System.out.println("C'est la meme carte");
    else System.out.println("ce n'est pas la meme carte");
    }



    //FONCTION MAIN
    public static void main(String[] args) {
    test();
    }
    }
    et voici ma classe JeuxDeCarte.java :

    import java.util.*;

    public class JeuxDeCarte{
    //Mes attributs

    private Carte[] tabCarte ;//aggréga de Carte
    private int nbCarte;

    //CONSTRUCTEUR PRIMITIF

    public JeuxDeCarte(){
    nbCarte = 0;
    tabCarte = new Carte[52]; // Ici on borne le jeux à 52 cartes.
    }


    //*****************************************************************************************
    // OBSERVATEUR
    //*****************************************************************************************

    //*****************************************************************************************
    // MUTATEURS
    //*****************************************************************************************

    public void remplirTab(Carte c){

    //Je génère une carte aléatoirement
    c.NewCarte();
    System.out.println(c.toString());
    //Je range ce nombre dans un tableau de carte
    tabCarte[0] = c;

    for (int i = 1; i<tabCarte.length;i++){
    c.NewCarte();
    tabCarte[i] = c;
    System.out.println("Valeur du tableau "+i+" "+tabCarte[i].toString());
    }
    for (int f = 0; f < tabCarte.length ; f++)System.out.println("Carte n°"+f+" "+tabCarte[f].toString());
    }

    //*****************************************************************************************
    // METHODES
    //*****************************************************************************************


    public String toString(){
    StringBuffer s = new StringBuffer("");
    for (int i=0;i<tabCarte.length;i++){
    s.append("->");
    s.append(tabCarte[i].toString());
    s.append("\n");
    }
    return s.toString();
    }


    //FONCTION DE TEST
    public static void test(){
    JeuxDeCarte j1 = new JeuxDeCarte();
    Carte c1 = new Carte();

    j1.remplirTab(c1);
    //System.out.println(j1.toString());
    }


    //FONCTION MAIN
    public static void main(String[] args) {
    test();
    }
    }
    Ah oui, soyer indulgent je débute vraiment

  4. #4
    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
    J'ai modifié un peu ton code et maintenant ça marche
    J'ai entre autre déplacé la méthode newCarte dans la class JeuxDeCarte. Puisque selon moi, elle n'avait rien à faire dans Carte
    Maintenant ça marche.

    Même si je ne pourrais pas te dire avec exactitude où était ton erreur

    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
    import java.util.*;
     
    public class JeuxDeCarte{
    //Mes attributs
     
    private Carte[] tabCarte ;//aggréga de Carte
    private int nbCarte;
     
    //CONSTRUCTEUR PRIMITIF
     
    public JeuxDeCarte(){
    nbCarte = 0;
    tabCarte = new Carte[52]; // Ici on borne le jeux à 52 cartes.
    }
     
     
    //*****************************************************************************************
    // OBSERVATEUR
    //*****************************************************************************************
     
    //*****************************************************************************************
    // MUTATEURS
    //*****************************************************************************************
     
    public void remplirTab(){
     
        for (int i = 0; i<tabCarte.length;i++){
            Carte c  = newCarte();
            tabCarte[i] = c;
     
            System.out.println("Valeur du tableau "+i+" "+tabCarte[i].toString());
        }
        for (int f = 0; f < tabCarte.length ; f++){
            System.out.println("Carte n°"+f+" "+tabCarte[f].toString());
        }
     
    }
     
    //*****************************************************************************************
    // METHODES
    //*****************************************************************************************
     
    private Carte newCarte(){
        Random randomGeneCouleur = new Random();
        Random randomGeneValeur = new Random();
        int couleur = randomGeneCouleur.nextInt(4);
        int valeur = randomGeneValeur.nextInt(13);
     
    return new Carte(valeur, couleur);
    }
     
     
    //FONCTION MAIN
    public static void main(String[] args) {
        JeuxDeCarte j1 = new JeuxDeCarte();
        j1.remplirTab();
        }
    }
    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
    import java.util.*;
     
    public class Carte{
    //Mes attributs
    private String[] tabCouleur = {"pique", "carreau","coeur","trefle"};
    private String[] tabValeur = {"as","deux","trois","quatre","cinq","six","sept","huit","neuf","dix","valet","dame","roi"};
    private int couleur, valeur;
     
    //CONSTRUCTEUR PRIMITIF
    public Carte(){
     couleur = 0;
     valeur = 0;
    }
     
    public Carte(int V, int C){
     couleur = C;
     valeur = V;
    }
     
     
     
     
    //*****************************************************************************************
    // OBSERVATEUR
    //*****************************************************************************************
    int getCouleur(){
    return this.couleur;
    }
     
    int getValeur(){
    return this.valeur;
    }
     
     
    //*****************************************************************************************
    // MUTATEURS
    //*****************************************************************************************
     
    void setCouleur(int C){
    this.couleur = C;
    }
     
    void setValeur(int V){
    this.valeur = V;
    }
    //*****************************************************************************************
    // METHODES
    //*****************************************************************************************
     
    public String toString(){
    return ("Ma carte est un "+tabValeur[this.getValeur()]+" de "+tabCouleur[this.getCouleur()]+"\n");
    }
     
    public boolean equals(Carte c){
    return this.couleur == c.couleur & this.valeur == c.valeur;
    }
    }
    Il était une fois [...] Et ils vécurent heureux et eurent beaucoup d'enfants!

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Effectivement ça marche ! Je te remercie pour ton aide, je bloquais la dessus depuis ce matin !
    @+ Bonne fête de fin d'année !

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 42
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    Je n'ai pas regardé en détail tout le code, mais l'erreur m'a sauté aux yeux. La méthode NewCarte étant sur Carte, l'appeler modifiait les propriétés de la carte je suppose. Mais ça ne pouvait en aucun cas changer d'instance... Du coup, dans ton tableau, tu mettais toujours la même instance, qui se trouvait modifiée à chaque appel de NewCarte. Et quand tu affichais ton tableau, tu obtenais forcément toujours la même chose puisque toutes ses cases pointaient sur la même carte.

    Encore une fois, je n'ai pas tout regardé en détail, mais à la lecture du code du premier post ça m'a choqué, je pense que c'est ça.

    A+ et joyeux Noël !

Discussions similaires

  1. Problème pour remplir un tableau de string
    Par Mescalito50 dans le forum C
    Réponses: 5
    Dernier message: 20/05/2011, 18h06
  2. problème pour delete un tableau d'objets
    Par Tekura dans le forum C++
    Réponses: 3
    Dernier message: 02/02/2011, 22h23
  3. Problème pour remplir un tableau.
    Par sandball22 dans le forum C
    Réponses: 2
    Dernier message: 02/05/2007, 14h54
  4. [VBA-Excel]Problème pour remplir une listview
    Par Le Djé dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/01/2006, 16h27
  5. [MFC] Problèmes pour remplir unecombobox
    Par tealc5 dans le forum MFC
    Réponses: 7
    Dernier message: 01/01/2006, 17h35

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