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 :

ArrayList incompréhension


Sujet :

Collection et Stream Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 12
    Points : 12
    Points
    12
    Par défaut ArrayList incompréhension
    Bonjour tout le monde !

    Voilà j'ai un arrayList et je veux en extraire chaque chaîne de caractère, le problème c'est que je veux stocker chaque sous chaînes dans un tableau de String mais que je n'obtiens que la dernière chaîne de mon ArrayList dans mon tableau String donc mon tableau de String contient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    "fiction"
    "10" 
    "2"
    "A.I."
    "2001"
    "Steven Spielberg"
    "oui"
    Voici mon code:

    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
    ArrayList<String> programmeList = new ArrayList<>();
            String values[] = null;
     
            programmeList.add("fiction, 21, 2, A.I., 2001, Steven Spielberg, oui");
     
            programmeList.add("divertissement, 12, toto, titi");
     
            programmeList.add("reportage, 0, 3, test, culturel");
     
            programmeList.add("reportage, 2, 3, test, monde");
     
            programmeList.add("fiction, 10, 2, A.I., 2001, Steven Spielberg, oui");
     
     
            for(String val: programmeList) {
                values =  val.split(",");
            }
    Voici un screen du débugger:

    Nom : Capture du 2015-05-07 11:53:47.png
Affichages : 121
Taille : 43,1 Ko

    je suppose que ça efface la valeur précédente à chaque tour de boucle, mais je ne vois pas comment faire, si vous pouviez m'éclairer !


    D'avance merci !

    PS: Je ne peux pas utiliser un autre type de données que l'arrayList

  2. #2
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Concernant ton probleme, c'est du au fait que tu utilises un String values[] = null; pour splitter les strings contenues dans l'arraylist. Cela cree une nouvelle instance de String[] mais ne modifie pas la String originale. Comme tu fais ca sur chaque element de ta liste, chacun est remplacé par le suivant et, in fine, la variable contient le dernier.

    Bref, pour faire simple, ce que tu cherches à faire, c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ArrayList<String[]> programmeList = new ArrayList<String[]>();
    programmeList.add("fiction, 21, 2, A.I., 2001, Steven Spielberg, oui".split(","));
    programmeList.add("divertissement, 12, toto, titi".split(","));
    Au passage, utiliser un tableau de String, c'est moche. Tu devrais creer une classe speciale "Film" qui possede tous ces attributs.

    Dans 6 mois, quand tu ne seras plus à fond dedans mais que tu auras un code à corriger, ce sera plus simple de lire:
    programmeList.get(0).getRealisateur();

    plutot que:
    programmeList.get(0)[4];

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    Merci pour ta réponse, mais je ne peux pas procéder comme ça car en fait l'ArrayList sera copié collé dans notre code par le prof, pour nous corriger, donc je ne peux pas changer en : ArrayList<String[]>

    En fait on doit gérer une grille TV, donc j'ai ces différentes classes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Programme {    
        protected String nom;
        protected int heure;
        protected int duree;
     
     
        public Programme(String n, int h, int d) {
            nom = n;
            heure = h;
            duree = d;
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Fiction extends Programme {
     
        private int annee;
        private String realisateur;
        private Boolean rediffusion;
     
        public Fiction(String n, int h, int d, int a, String real, Boolean redif) {
     
            super(n,h,d);
            annee = a;
            realisateur = real;
            rediffusion = redif;
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Reportage extends Programme {
        private String theme;
     
        public Reportage(String n, int h, int d, String t) {
     
            super(n,h,d);
            theme = t;
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Divertissement extends Programme {
        private String presentateur;
     
        public Divertissement(String n, int h, int d, String pres) {
     
            super(n,h,d);
            presentateur = pres;
        }
    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
    public class Grille {
        private Programme tabProg [] = new Programme[24];
        private int i;
        private boolean valideGRille = true;
     
        public Grille() {}
     
        public void ajoutProg (Programme p) {
     
            /*  Si le programme dure plus d'une heure :
                    Tant que heure est < à heureFin on boucle puis : 
                        - On l'ajoute à l'indice heure - 1 car le tableau va de 0 à 23 (donc 24H)               
            */
            if(p.duree >= 1) {
                int heure = p.heure;
                int heureFin = p.heureFin();
     
                while (heure < heureFin) {
                    int ind = heure-1;
                    tabProg[ind] = p;         
                    heure++;
                }
            }
        }
    L'array list nous sert donc de créer une grille de programme, sauf qu'il faut en extraire chaque sous chaîne déjà pour savoir de quel type de programme il s'agit puis ensuite de quels paramètres il est question et une fois le programme créé le stocker dans la grille.

    Merci !

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Il n'y a aucun lien entre le tableau de String et ce que ton prof te demande. Ton prof te demande de créer des objets de type Programme et de les mettre dans la grille, donc ta boucle doit contenir au moins quelque part une appel à grille.ajoutProgramme(....)

  5. #5
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Citation Envoyé par Petrucheqa Voir le message
    Merci pour ta réponse, mais je ne peux pas procéder comme ça car en fait l'ArrayList sera copié collé dans notre code par le prof, pour nous corriger, donc je ne peux pas changer en : ArrayList<String[]>
    Mouais, je ne vois pas vraiment le rapport entre le code que tu postes ici et le code initial. Mais bon, utiliser des classes dédiées est bien la méthode "propre" que je suggerais.

    Citation Envoyé par Petrucheqa Voir le message
    L'array list nous sert donc de créer une grille de programme, sauf qu'il faut en extraire chaque sous chaîne déjà pour savoir de quel type de programme il s'agit puis ensuite de quels paramètres il est question et une fois le programme créé le stocker dans la grille.
    La grille de programme devrait plutot ressembler à une ArrayList<Programme> plutot qu'à ArrayList<String> dans ce cas, non ?


    Pour ton probleme, je suppose que l'ArryList que tu crées est supposée etre l'entrée de ton programme (meme si un fichier serait plus adapté). Ton code devrait ressembler à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for(String val: programmeList)
    {
      Sring[] values =  val.split(",");
      String nomProgramme = ...;
      int heure = ...;
      int duree = ...;
      String type = ...;
     
      // Puis, en fonction du type, creer un Reportage, Divertissement, Fiction, ...
      Programme p = new Reportage(...);
      ajoutProg(p);
    }

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    Merci à tous pour votre aide j'ai réussi !

    Il suffisait que j'instancie mon programme à chaque tour de boucle et que j'ajoute sa référence dans mon tableau de programmes !

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

Discussions similaires

  1. [info]ArrayList
    Par schousso dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 06/05/2004, 11h44
  2. [Fichier] Ajout des lignes de doc dans arraylist
    Par 3adoula dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 29/04/2004, 22h41
  3. [WSAD5] probleme incompréhensible
    Par capitaine_banane dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 07/04/2004, 11h56
  4. [ STRUTS ][ JSP ][ ArrayList] un lien pour trier
    Par LoulouFifi dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 03/02/2004, 17h24
  5. [JSP] Erreur incompréhensible
    Par xxaragornxx dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 09/09/2003, 16h37

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