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 :

Aide pour ArrayList<>


Sujet :

avec Java

  1. #1
    Nouveau Candidat au Club
    Aide pour ArrayList<>
    Bonjour à tous !

    J'ai un TP en Java à rendre pour mon école mais je suis débutant et je ne vois pas beaucoup comment faire. (je ne comprends pas beaucoup le sujet).

    Voici la consigne :
    J'ai deux classes à coder (Liste et Pile)

    Pour la classe Liste, le rôle des méthodes est :
    • Premier() : sans argument, se positionne sur le premier élément de la liste
    • Dernier() : sans argument, se positionne sur le dernier élément de la liste
    • Suivant() : sans argument, retourne l’élément suivant de celui sur lequel on est positionné
    • Supprimer() : sans argument, supprime l’élément sur lequel on est positionné
    • Ajouter() : en argument un objet générique de type Object à ajouter dans l’élément sur lequel on
    est positionné

    Pour la classe Pile, le rôle des méthodes est :
    • Empiler() : en argument un objet générique de type Object à empiler
    • Depiler() : sans argument, retourne l’objet générique de type Object à dépiler

    1. Dans un même package, codez chacune des deux classes dans son propre fichier .java correctement nommé. Pensez à ajouter les attributs, constructeurs et autres méthodes qui vous semblent utiles.

    -Que veut dire se positionner ?
    -Devrais-je utiliser un itérateur ou pas besoin ?

  2. #2
    Membre expérimenté
    effectivement ça vaudrait le coup d'avoir des précisions.
    on a un objet qui stocke des éléments et qui maintient un champ élément courant
    mais alors:
    - comment obtenir cet élément courant? (il n'est pas précisé si premier ou dernier retourne un élément). Or on n'a que suivant() ce qui n'est pas exactement pratique si on veut consulter le premier élément...
    - ensuite quand on supprime l'élément courant où se positionne t-on ensuite? il y a des cas aux limites où il va falloir se poser la question (exemple: on est au dernier alors c'est le précédent? mais alors si on est au premier?)
    - ajouter DANS l'élement courant? ça veut dire remplacer l'objet actuel dans la liste? mais comment ajouter en FIN de liste (ce qui semblerait utile)?
    Bref il faudrait le texte exact des spécifications.
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (un peu de pub pour mon site: http://scrountch.info/java )

  3. #3
    Nouveau Candidat au Club
    Tout d'abord merci pour votre réponse rapide.
    En effet le sujet n'est pas clair... Au début j'avais fais un code qui retournait le premier et le dernier élément etc.
    Là j'ai créer une variable protected int position = 0; et je veux donc que cette variable soit la position à l'instant t.
    donc dans mon code pour Premier(); Dernier(); et Suivant(); j'ai fais comme ceci :
    (j'ai oublié de dire que je faisais une ArrayList<Object>)
    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
     
    //Se place sur le premier élément
        public void Premier(){
            tableauObjets.get(Position);
            System.out.println(tableauObjets.get(Position));
        }
    //Se place sur le dernier élément
        public void Dernier(){
            Position = tableauObjets.size()-1;
            tableauObjets.get(Position);
            System.out.println(tableauObjets.get(Position));
        }
        //Affiche l'élément suivant sur lequel on est positionné
        public Object Suivant(){
            Position ++;
            System.out.println(tableauObjets.get(Position));
            return tableauObjets.get(Position);
        }


    Pensez-vous que c'est une bonne méthode ?

  4. #4
    Membre expérimenté
    juste une remarque préliminaire: essaye de respecter les conventions d'écriture : les méthodes et le champ position devraient commencer par une minuscule.
    Ceci dit:
    - selon toi le sens de premier() serait de donner la position courante...
    - qu'est-ce qui se passe si tu fais successivement dernier() et suivant() ???
    - pourquoi tu fais plusieurs appels à get dans la même méthode?
    - tu parles d'une arrayList puis ensuite dans le code d'un tableau d'objets... on fait quoi?

    * il serait plus logique que les méthodes premier() et dernier() renvoient l'objet à la position demandée.
    * si la liste est vide on rend quoi?
    * de même peut-il y avoir des valeurs null s'il y a un objet manquant
    * de même suivant()peut rendre null s'il n'y a plus rien? (ou exception?)... on fait quoi?
    * toujours la question du sens de ajouter()...
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (un peu de pub pour mon site: http://scrountch.info/java )

  5. #5
    Nouveau Candidat au Club
    Ok merci du conseil

    -Non pardon j'ai oublié de dire que j'ai initialisé mon protected int Position = 0; c-à-d qu'il retourne l'élément à l'index 0
    -Si je fais dernier et suivant j'ai une erreur OutOfBounds ducoup cela parcoure bien la liste normalement ?
    -j'ai finallement fais une méthode Afficher() pour afficher la valeur
    -Yes j'avais commencé par un tableau d'objets mais j'ai décidé de faire une ArrayList j'ai oublié de changer...

  6. #6
    Nouveau Candidat au Club
    J'ai fais ça pour la classe Liste :

    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
     
    public class Liste {
     
        private ArrayList<Object> maListeObjets = new ArrayList<Object>();
        protected int position;
     
        //Constructeur de Liste
        public Liste(){
            maListeObjets.add(1);
            maListeObjets.add(2);
            maListeObjets.add(3);
            maListeObjets.add(4);
            maListeObjets.add(5);              
        }
        //Se place sur le premier élément
        public void premierElement(){
            position = 0;
            //maListeObjets.get(position);
            afficherElement();
     
        }
        //Se place sur le dernier élément
        public void dernierElement(){
            position = maListeObjets.size()-1;
            //maListeObjets.get(position);
            afficherElement();
     
        }
        //Affiche l'élément suivant sur lequel on est positionné
        public Object elementSuivant(){
            position++;
            afficherElement();
            return maListeObjets.get(position);
        }
        //Supprime l'élément sur lequel on est positionné
        public void supprimerElement(){    
            maListeObjets.remove(position);
        }
        //Ajouter une valeur
        public void ajouterElement(Object objet){
            maListeObjets.add(position, objet);
        }
        //Affiche la valeur
        public void afficherElement(){
            System.out.println(maListeObjets.get(position));
        }
    }


    Et ça dans mon main :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public static void main(String[] args){
     
            Liste maListe = new Liste();
     
            maListe.premierElement();
            maListe.elementSuivant();
            maListe.dernierElement();
            maListe.ajouterElement(6);
            maListe.dernierElement();
    }


    Donc logiquement dans ma tête je voudrai afficher : 1 2 5 6 sauf que dans ma console s'affiche 1 2 5 5.
    Je ne comprends pas mon erreur... Sûrement dans ma méthode ajouterElement ?