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 :

Utilisation de ArrayList


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2017
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Utilisation de ArrayList
    Bonjour,

    Je crée actuellement un jeu de carte ou on peux crée par exemple une carte Pokémon, cependant j'arrive pas a stocké plusieurs "créations de carte" dans un ArrayList

    J'ai fais un menu où la personne clique tape "4" pour lancer la classe "Paquet" où elle peux consulté son paquet de carte aprés avoir crée une /ou plusieurs cartes.
    La première carte que je crée se stock bien dans le ArrayList mais lorsque je crée une deuxième carte elle remplace celle du tableau du coup le tableau n'affiche pas plus d'une carte...

    Quelqu'un pourrait m'aider à ce niveau là

    Ma classe PokemonCard ou je crée la carte Pokémon qui possède un String namePokemon, un int HpPokemon et un Type d'energie EnergyType :

    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
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    package upmc.pcg.game;
     
    import java.nio.charset.Charset;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    import java.util.Scanner;
    import upmc.pcg.Menu;
    import upmc.pcg.ajoutCarte;
     
     
     
    /**
     *
     * @author lepor
     */
    public class PokemonCard {
     
     
        private String namePokemon;
        public static EnergyType energyType;
        private int hp;
     
        //Constructeur
        public PokemonCard(String namePokemon, int hp, EnergyType energyType) {
            this.namePokemon = namePokemon;
            this.hp = hp;
            this.energyType = energyType;
        }
     
        //Accesseurs
        public String getCardPokemon(){
            return namePokemon+hp+energyType;
        }
     
        public String getNamePokemon() {
            return namePokemon;
        }
     
        public int getHpPokemon() {
            return hp;
        }
     
        public EnergyType getEnergyTypePokemon() {
            return energyType;
        }
       public String toString() {
           return namePokemon+hp+energyType;
       }
     
        public String msgPokemon() {
            return "Vous avez crée "+namePokemon+" avec "+hp+" de point de vie,"+" et de type "+energyType;
    }
     
    public static List<PokemonCard> jeu = new ArrayList<PokemonCard>();
     
    public static PokemonCard getCarte() {
        for (int x=0; x<jeu.size(); x++) {
           return jeu.get(x);
        }
            return null;
     
    }
    private int stId;
     
     
    public boolean setIdNum(int id)
        {
            this.stId = id;
            id++;
            return true;
        }
     
     
        public static void askPokemonCard() {
                Scanner console1 = new Scanner(System.in);
                System.out.println("Nom du pokémon: ");
                System.out.flush();
                String namePokemon = console1.nextLine();
     
     
                Scanner console2 = new Scanner(System.in);
                System.out.println("HP : ");
                System.out.flush();
                int hpPokemon = console2.nextInt();
     
     
                System.out.println("Voici la liste des énergies :");
     
     
                for(EnergyType energy : EnergyType.values()){
                   System.out.print(energy+" ,");
                }
                System.out.println("\n");
                Scanner console3 = new Scanner(System.in);
                System.out.println("Veuillez choisir et écrire l'une des énergies (N'oubliez pas la majuscule):");
                System.out.flush();
                String nameEnergy = console3.nextLine();
     
            //Attribution du choix utilisateur (énergie) au type energyType
                if (nameEnergy.equals("Plante")) {
                    energyType = EnergyType.Plante;
                    }
                else if (nameEnergy.equals("Electrique"))  {
                    energyType = EnergyType.Electrique;
                }
                else if (nameEnergy.equals("Eau")) {
                    energyType = EnergyType.Eau;
                }
                else if (nameEnergy.equals("Psy")) {
                    energyType = EnergyType.Psy;
                }
                else if (nameEnergy.equals("Feu")) {
                    energyType = EnergyType.Feu;
                }
                else if (nameEnergy.equals("Combat")) {
                    energyType = EnergyType.Combat;
                }
                else if (nameEnergy.equals("Métal")) {
                    energyType = EnergyType.Métal;
                }
                else if (nameEnergy.equals("Obscurité")) {
                    energyType = EnergyType.Obscurité;
                }
                else if (nameEnergy.equals("Fée")) {
                    energyType = EnergyType.Fée;
                }
                else if (nameEnergy.equals("Incolore")) {
                    energyType = EnergyType.Incolore;
                }
                else if (nameEnergy.equals("Dragon")) {
                    energyType = EnergyType.Dragon;
                }
     
            jeu.add(new PokemonCard(namePokemon, hpPokemon, energyType)); // Création objet + ajout dans Array
            for (int i=0; i<999; i++) {
     
            PokemonCard pokemon = new PokemonCard (namePokemon, hpPokemon, energyType);
     
            pokemon.setIdNum(i); 
            jeu.add(pokemon);
            }
     
     
     
     
     
     
            Scanner console4 = new Scanner(System.in);
     
            System.out.println("Voulez-vous ajouter une nouvelle carte ?");
            System.out.println("[1] YES / [2] NO");
            System.out.flush();
            int yes_no = console3.nextInt();
     
            if (yes_no == 1) {
            ajoutCarte ajoutc = new ajoutCarte(); //Lance la classe ajoutCarte
            ajoutc.texte1(); //Lancement méthode
            }
            else {
            Menu menu = new Menu(); //Lancement du menu
            menu.start();
            }
     
        }
     
      }
    Ma classe Paquet qui est appeler pour voir le Paquet de carte :

    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
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    package upmc.pcg;
    import java.util.ArrayList;
    import java.util.List;
    import upmc.pcg.game.EnergyType;
    import upmc.pcg.game.PokemonCard;
    import static upmc.pcg.game.PokemonCard.getCarte;
    import static upmc.pcg.game.PokemonCard.jeu;
     
     
    /**
     *
     * @author lepor
     */
    public class Paquet {
     
     
     
        public static void afficherCarte(){
     
            System.out.println(getCarte().toString());
        }
     
     
     
     
    }
    Cordialement,
    André

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par AndrePC Voir le message
    La première carte que je crée se stock bien dans le ArrayList mais lorsque je crée une deuxième carte elle remplace celle du tableau
    Vraiment ?

    Lorsque tu crées deux différents pokémons, avec des noms différents, des hit points différents et une énergie différente, c'est ce que tu observes ? Tu en es sûr ?
    Est-ce que tu peux nous montrer comment tu en es sûr ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2017
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Vraiment ?

    Lorsque tu crées deux différents pokémons, avec des noms différents, des hit points différents et une énergie différente, c'est ce que tu observes ? Tu en es sûr ?
    Est-ce que tu peux nous montrer comment tu en es sûr ?
    J'ai crée une carte Dracofeu 180 auparavant aprés j'ai taper 4 pour afficher le paquet de carte et y'a bien la carte Dracofeu, cependant si je crée une carte "Salameche" par exemple , elle va prendre la place de Dracofeu et y'aura que Salameche a l'affichage et non Dracofeu et salameche
    Nom : Capture.PNG
Affichages : 1027
Taille : 8,6 Ko

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Moi je vois un dracofeu, pas un salameche.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Avatar de Chatanga
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 211
    Points : 346
    Points
    346
    Par défaut
    N'étant pas opticien, je me contenterais de 3 remarques dans ton code :

    1) Je suis quasiment sûr que c'est un 'final' et non un 'static' qu'il faudrait ici.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class PokemonCard {
     
        private String namePokemon;
        public static EnergyType energyType;
        private int hp;
     
        // ...
    }
    2) La première valeur est toujours retournée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public static PokemonCard getCarte() {
        for (int x=0; x<jeu.size(); x++) {
           return jeu.get(x);
        }
            return null;
     
    }
    3) L'incrémentation ne sert à rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        public boolean setIdNum(int id) {
    	this.stId = id;
    	id++;
    	return true;
        }

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2017
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Moi je vois un dracofeu, pas un salameche.
    Oui y'a un Dracofeu mais si je crée une autre carte Nommé Salameche, le "Dracofeu" se remplacera en Salameche

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2017
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Chatanga Voir le message
    N'étant pas opticien, je me contenterais de 3 remarques dans ton code :

    1) Je suis quasiment sûr que c'est un 'final' et non un 'static' qu'il faudrait ici.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class PokemonCard {
     
        private String namePokemon;
        public static EnergyType energyType;
        private int hp;
     
        // ...
    }
    Avec un final j'ai cette erreur
    Nom : final.PNG
Affichages : 2472
Taille : 27,7 Ko

    Citation Envoyé par Chatanga Voir le message
    2) La première valeur est toujours retournée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public static PokemonCard getCarte() {
        for (int x=0; x<jeu.size(); x++) {
           return jeu.get(x);
        }
            return null;
     
    }
    Nom : err.PNG
Affichages : 1081
Taille : 10,5 Ko

    Citation Envoyé par Chatanga Voir le message
    3) L'incrémentation ne sert à rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        public boolean setIdNum(int id) {
    	this.stId = id;
    	id++;
    	return true;
        }

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par AndrePC Voir le message
    Avec un final j'ai cette erreur
    Nom : final.PNG
Affichages : 2472
Taille : 27,7 Ko
    final n'est pas obligatoire (si la variable energyType n'a pas vocation à changer, il pourrait l'être, pour le garantir). Cependant, oui, la variable ne devrait pas être static, parce qu'en étant static, ça signifie que toutes les cartes ont la même energyType et je suis à peu près sûr que ce n'est pas ce que tu veux.

    Tu as le message d'erreur en question parce que tu n'as pas créé de variable locale energyType. Donc c'est la variable de la classe que tu modifies, et comme tu est dans une méthode static à ce moment, astPkemonCard, tu peux accèder à cette variable instance, donc l'IDE indique que tu essayes d'accèder à une variable non-static depuis un contexte static, ce qui ne veut pas dire que tu dois passer la variable en static pour autant.
    Il te suffit de créer une variable locale, et de la passer naturellement au constructeur, ce qui est fait ici : jeu.add(new PokemonCard(namePokemon, hpPokemon, energyType));Si tu écris ton code comme suit, tu verras que tu peux retirer le static, et même mettre éventuellement final (si energyType de PokemonCard n'est pas modifié ailleurs).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    EnergyType energyType = null; // une variable locale
    if (nameEnergy.equals("Plante")) {
                    energyType = EnergyType.Plante;
                    }
                else if (nameEnergy.equals("Electrique"))  {
                    energyType = EnergyType.Electrique;
                }
                /* ... tous tes else if (que tu pourrais remplacer par un switch pour simplifier, au minima)
                else if (nameEnergy.equals("Dragon")) {
                    energyType = EnergyType.Dragon;
                }
     
            jeu.add(new PokemonCard(namePokemon, hpPokemon, energyType)); // Création objet + ajout dans Array

    Pour le problème de la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static PokemonCard getCarte() {
        for (int x=0; x<jeu.size(); x++) {
           return jeu.get(x);
        }
            return null;
     
    }
    Elle ne retourne en effet jamais autre chose que le premier élément de la liste si la liste en contient, ou null sinon.
    Retirer le return null n'y change rien, mais rend la méthode non compilable parce qu'une méthode avec un type de retour doit toujours retourner quelque chose. Mais ça n'a rien à voir avec ce que fait ta méthode.
    Tu auras tout aussi bien pu écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static PokemonCard getCarte() {
        if (jeu.isEmpty()) {
            return null;
        }
        return jeu.get(0);
     
    }
    Ces deux méthodes donnent exactement le même résultat.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par AndrePC Voir le message
    Oui y'a un Dracofeu mais si je crée une autre carte Nommé Salameche, le "Dracofeu" se remplacera en Salameche
    On t'a demandé comment (avec quel code sous-entendu) tu pouvais en être sûr. Tu n'as montré qu'un résultat d'exécution où on voit un Dracofeu, et pas de Salameche. Donc rien ne nous montre qu'il y a vraiment un Salameche alors qu'il devrait y avoir un Dracofeu, et ni par quel moyen tu arrives à cette déduction, donc pas moyen de te dire comment corriger ton code, sauf faire tout un tas de suppositions (au passage ta classe Paquet telle que tu nous la montres ne compile pas).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2017
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    On t'a demandé comment (avec quel code sous-entendu) tu pouvais en être sûr. Tu n'as montré qu'un résultat d'exécution où on voit un Dracofeu, et pas de Salameche. Donc rien ne nous montre qu'il y a vraiment un Salameche alors qu'il devrait y avoir un Dracofeu, et ni par quel moyen tu arrives à cette déduction, donc pas moyen de te dire comment corriger ton code, sauf faire tout un tas de suppositions (au passage ta classe Paquet telle que tu nous la montres ne compile pas).
    Justement je sais pas quel code fait en sorte que la carte première est remplacer par la carte deuxième :/
    Tout d'abbord merci pour tes réponses ! Je suis pas très doué en Java ce qui me permet d'en apprendre plus

    Et ducoup comment je ferais pour que la méthode recupére tout les éléments que je crée ?

  11. #11
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par AndrePC Voir le message
    Justement je sais pas quel code fait en sorte que la carte première est remplacer par la carte deuxième :/
    Ça, on s'en doute bien puisque tu poses la question. Mais ce n'est pas ça qu'on te demande. Ce qu'on te demande, c'est de nous montrer le code que tu exécutes pour en déduire que la deuxième carte remplace la première. Parce qu'avec le code que tu montres, on ne constate pas de problème particulier dans le remplissage de ton ArrayList. La seule chose qu'on peut faire c'est supposer que tu penses que la deuxième carte remplace la première parce que le code tu utilises pour afficher la deuxième affiche en fait la première.

    Citation Envoyé par AndrePC Voir le message
    Et ducoup comment je ferais pour que la méthode recupére tout les éléments que je crée ?
    Et bien, il y a plein de moyens. Une ArrayList est avant tout une List (implémente cette interface) et permet d’accéder directement à un élément par son index.

    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public static PokemonCard getCarte(int index) {
           return jeu.get(index); 
    }
    et PokemonCard carte = PokemonCard.getCarte(1); pour accéder à la deuxième carte.

    Si tu as une méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public static PokemonCard getNombreDeCartes() {
           return jeu.size(); 
    }
    tu pourras connaître le nombre de cartes dans jeu.

    Mais on peut également faire un parcourt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public static Iterator<PokemonCard> getCartes() {
           return jeu.iterator(); 
    }
    qui te permettra :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(Iterator<PokemonCard> iter = PokemonCard.getCartes(); iter.hasNext()) {
       PokemonCard carte = iter.next();
       /*...*/
    }
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public static Iterable<PokemonCard> getCartes() {
           return jeu; 
    }
    qui te permettra :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(PokemonCard carte : PokemonCard.getCartes()) {
    }
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public static Stream<PokemonCard> getCartes() {
           return jeu.stream(); 
    }
    qui te permettra, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PokemonCard.getCartes().filter(carte-> carte.getEnergyType()==EnergyType.Electrique).forEach(System.out::println); // affiche toutes les cartes dont l'EnergyType est Electrique.
    etc.

    A noter par ailleurs, que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    jeu.add(new PokemonCard(namePokemon, hpPokemon, energyType)); // Création objet + ajout dans Array
            for (int i=0; i<999; i++) {
     
            PokemonCard pokemon = new PokemonCard (namePokemon, hpPokemon, energyType);
     
            pokemon.setIdNum(i); 
            jeu.add(pokemon);
            }
    Ce code crée deux 999 cartes, dont les deux première ont le même id (stId). La première est créée avant la boucle, et sa valeur de stId est 0 parce que 0 est la valeur par défaut de cette variable. Et la seconde est créée dans la boucle, avec stId à 0, par pokemon.setIdNum(i);.

    En théorie, un identifiant devrait être unique et immuable (ne pas être modifiable après avoir été affecté). Parce que c'est un moyen d'identifier de façon garantie un élément. Au lieu de faire un setter (setIdNum), il faudrait que l'id soit affecté de manière automatique à la création, ce qui te garantie d'être sûr d'avoir un id, et qui te permettra d'être sûr de lui affecter la valeur telle que tu le veux (unique et non modifiable ultérieurement, en théorie).

    Par exemple, tu peux simplement faire (je simplifie le code pour ne laisser que ce qui nous intéresse) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class PokemonCard {
        private static int ID = 0; // on va se servir d'un entier pour générer des clefs
        private final int stId; // le final  garantit que tu ne pourras écrire de code qui modifie l'id après la construction et garantie que tu seras obligé d'écrire du code qui affecte un id dans la 
    constructon
        public PokemonCard(String namePokemon, int hp, EnergyType energyType) {
             stId = ID++; // on affecte la valeur de ID et en l'incrémente
             /*... affectation des autres attributs ...*/  
        }
        public int getId() { // une méthode pour récupérer l'id
             return stId;
        }
    }
    Ainsi, tu peux créer des cartes, quand tu veux, au lancement du programme, puis ensuite au cour du jeu, chacune aura un id différent et non modifiable.
    Si tu veux pouvoir garantir que même en multithread l'id est unique (ici, ce n'est pas garanti, parce qu'un thread pourrait exécuter la ligne stId = ID++; en même temps qu'un autre, et affecter la valeur de ID entre le moment où la valeur est affectée par le premier à l'stId de l'autre carte et le moment où le ++ incrémente ID, donc deux cartes pourraient avoir le même identifiant), tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class PokemonCard {
        private static AtomicInteger ID = new AtomicInteger(); // on va se servir d'un entier pour générer des clefs
        private final int stId; // le final  garantit que tu ne pourras écrire de code qui modifie l'id après la construction et garantie que tu seras obligé d'écrire du code qui affecte un id dans la 
    constructon
        public PokemonCard(String namePokemon, int hp, EnergyType energyType) {
             stId = ID.getAndIncrement(); // on affecte la valeur courrante de ID et en l'incrémente, de manière atomique (donc même si deux threads appellent cette méthode en même temps, ils obtiendront une valeur différente)
             /*... affectation des autres attributs ...*/  
        }
        public int getId() { // une méthode pour récupérer l'id
             return stId;
        }
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Bonne utilisation des ArrayList et Hashtable?
    Par floctc dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 20/04/2010, 09h17
  2. Utilisation d'ArrayList pour XML
    Par Zanthia dans le forum C#
    Réponses: 2
    Dernier message: 19/06/2009, 17h18
  3. utilisation classe ArrayList
    Par franfr57 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 19/03/2009, 16h48
  4. [C#]Méthode utilisant des arraylist
    Par Cyriusix dans le forum Accès aux données
    Réponses: 6
    Dernier message: 04/05/2007, 09h44
  5. [VBA-A]Est-il possible d'utiliser un ArrayList en VBA?
    Par Caroline1 dans le forum VBA Access
    Réponses: 4
    Dernier message: 30/03/2006, 15h19

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