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 la récupération d'un ArrayList


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club Avatar de pony99
    Femme Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Points : 69
    Points
    69
    Par défaut Problème pour la récupération d'un ArrayList
    Bonsoir,

    J'essai depuis quelque heures (5 ou 6) de trouvé un solution a ma problème.
    J'ai une Jcombobox, et selon le choix, un objet "ls".
    Mais je n'arrive pas a récupéré cette objet "ls"

    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
    public class BoutonEnvoyerProd implements ActionListener{
                  @Override
    		public void actionPerformed(ActionEvent e) {
    			 String type = (String) typeProd.getSelectedItem();
                             if (type.equals("Choix1")){
                             Liste1 ls = new Liste1();
    			}
    			else if(type.equals("Choix2")){
     
    				Liste2 ls = new Liste2();
     
    			}
    			else if(type.equals("Choix3")){
     
    				Liste3 ls = new Liste3();
    			}
     
    			listeEnsemble.add(ls);
     
    			listeEnsemble.afficheProduit();
                          }
    	}
    J'ai une erreur suivante au niveau de la ligne 28,
    "ls cannot be resolved to a variable"

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    L'erreur est du au fait que tu déclares ls dans les conditions if, donc ls n'est visible que dans les bloc if.
    Sinon, c'est quoi Liste1, Liste2, Liste3? Est-ce des classes qui héritent une même classe mère où implémente une même interface?

    A+.

  3. #3
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Points : 2 657
    Points
    2 657
    Par défaut
    Tu devrais plutot mettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Liste ls = null;
     if (type.equals("Choix1")){
                            ls = new Liste1();
    			}
    			else if(type.equals("Choix2")){
     
    				 ls = new Liste2();
     
    			}
    			else if(type.equals("Choix3")){
     
    				 ls = new Liste3();
    			}

  4. #4
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    En ayant bien sur Liste1, Liste2 et Liste3 qui implémentent l'interface Liste.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  5. #5
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Citation Envoyé par Robin56 Voir le message
    En ayant bien sur Liste1, Liste2 et Liste3 qui implémentent l'interface Liste.
    Pas forcément une liste mais on aussi ou descendant d'une même classe mère Liste.

  6. #6
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    Pas forcément une liste mais on aussi ou descendant d'une même classe mère Liste.
    Oui oui qui implémentent une interface Liste ou étendent une classe-mère Liste.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  7. #7
    Membre du Club Avatar de pony99
    Femme Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Points : 69
    Points
    69
    Par défaut
    Excusez moi de répondre si tard, je viens de me réveillé, hier j'ai cherché une solution très tard.

    En fait c'est un peu la suite du problème exposé il y a quq jour ICI

    les classes GroupeAnimaux, Chien, Chat, et Canarie sont des classe filles de Animaux
    Donc je remet la classe comme tel avec la solution de deathness

    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
    public class BoutonEnvoyerProd implements ActionListener{
                  @Override
    		public void actionPerformed(ActionEvent e) {
    			 String type = (String) typeProd.getSelectedItem();
     
                              Animaux ls; // ajout de la solution de deathness
     
                             if (type.equals("Chien")){
                             Chien ls = new Chien();
    			}
    			else if(type.equals("Chat")){
     
    				Chat ls = new Chat();
     
    			}
    			else if(type.equals("Canarie"){
     
    				Canarie ls = new Canarie();
    			}
     
    			GroupeAnimaux.add(ls);
     
    			GroupeAnimaux.afficheProduit();
                          }
    	}
    A la ligne 21 j'ai l'avertissement suivant

    Type safety: The method add(Animaux) belongs to the raw type GroupeAnimaux. References to generic type GroupeAnimaux<Anim> should be parameterized
    et quand j’exécute j'ai une erreur
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException.............

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 86
    Points : 54
    Points
    54
    Par défaut
    salut,

    si la fonction add de la classe GroupeAnimaux prend en paramètre un objet de type Animaux je pense que la solution est la suivante :

    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
    public class BoutonEnvoyerProd implements ActionListener{
                  @Override
    		public void actionPerformed(ActionEvent e) {
    			 String type = (String) typeProd.getSelectedItem();
     
                              Animaux ls; // ajout de la solution de deathness
     
                             if (type.equals("Chien")){
                                    ls = new Chien();
    			}
    			else if(type.equals("Chat")){
     
    				ls = new Chat();
     
    			}
    			else if(type.equals("Canarie"){
     
    				ls = new Canarie();
    			}
     
    			GroupeAnimaux.add(ls);
     
    			GroupeAnimaux.afficheProduit();
                          }
    	}
    je n'en suis pas sur! essai et tiens moi au courant
    bon courage

  9. #9
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Points : 532
    Points
    532
    Par défaut
    Bonjour,

    Inutile de redéfinir la variable ls à chaque fois. C'est d'ailleurs étrange que le code compile :

    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
     
    public class BoutonEnvoyerProd implements ActionListener{
                   @Override
    		public void actionPerformed(ActionEvent e) {
    			 String type = (String) typeProd.getSelectedItem();
     
                              Animaux ls; // ajout de la solution de deathness
     
                             if (type.equals("Chien")){
                             ls = new Chien();
    			}
    			else if(type.equals("Chat")){
     
    				ls = new Chat();
     
    			}
    			else if(type.equals("Canarie"){
     
    				ls = new Canarie();
    			}
     
    			GroupeAnimaux.add(ls);
     
    			GroupeAnimaux.afficheProduit();
                          }
    	}
    Ensuite, GroupeAnimaux, c'est quoi ? Tu fais un ajout dans un contexte static ?

  10. #10
    Membre du Club Avatar de pony99
    Femme Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Points : 69
    Points
    69
    Par défaut
    @wassim_boy si tu regarde c'est exactement ce que j'ai mis.

    @oneagaindoguys non justement ça ne compile pas, mais cela m'affiche aucune erreur

    bon pour être plus précis je mets les classe

    Classe Animaux

    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
    package animaux;
     
    public class Animaux {
     
    	private String nom;
    	private int refanimal;
    	private double poids;
    	private double taille;
     
     
     
    	public String getNom() {
    		return nom;
    	}
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
    	public int getRefanimal() {
    		return refanimal;
    	}
    	public void setRefanimal(int refanimal) {
    		this.refanimal = refanimal;
    	}
    	public double getPoids() {
    		return poids;
    	}
    	public void setPoids(double poids) {
    		this.poids = poids;
    	}
    	public double getTaille() {
    		return taille;
    	}
    	public void setTaille(double taille) {
    		this.taille = taille;
    	}
     
    	public Animaux(String nom, int refanimal, double poids, double taille) {
    		this.refanimal = refanimal;
    		this.poids = poids;
    		this.taille = taille;
    		this.nom=nom;
    	}
     
    	public void  afficherAnimal(){
    		System.out.print("\nNom  : "+nom+"\nRéférence  : "+refanimal+"\nPoids : "+poids+"\nTailles : "+taille);
    	}
     
    }
    Classe GroupeAnimaux

    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
    package animaux;
     
    import java.util.ArrayList;
     
     
     
    public class GroupeAnimaux <AnimO extends Animaux> {
     
     
    	private ArrayList<AnimO> groupeAnimaux = new ArrayList<AnimO>();
     
    	public void add(AnimO a){
    		groupeAnimaux.add(a);
    	}
     
    	public AnimO recherche(String nomAnimal){
    		for (AnimO an : groupeAnimaux) {
    			if(an.getNom().equals(nomAnimal))
    				an.afficherAnimal();
    			return an;
    		}
    		return null; 
    	}
     
    	public void afficher(){
    		for (AnimO prod: groupeAnimaux){
    			prod.afficherAnimal();
    		}
    	}
     
     
     
    }
    Classe Chien

    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
    package animaux;
     
    public class Chien extends Animaux {
     
     
    	private int nbrDents;
     
     
     
    	public int getNbrDents() {
    		return nbrDents;
    	}
     
     
     
    	public void setNbrDents(int nbrDents) {
    		this.nbrDents = nbrDents;
    	}
     
     
     
     
    	public Chien(String nom, int refanimal, double poids, double taille,
    			int nbrDents) {
    		super(nom, refanimal, poids, taille);
    		this.nbrDents = nbrDents;
    	}
     
     
     
    	public Chien(String nom, int refanimal, double poids, double taille) {
    		super(nom, refanimal, poids, taille);
    		// TODO Auto-generated constructor stub
    	}
     
    	public void  afficherAnimal(){
    		super.afficherAnimal();
    		System.out.println("\nNombre de dent "+nbrDents);
    	}
     
    }
    La classe Chat et canarie sont semblable a celle de chiens, sauf que pour le canarie c'est "boolean sexe", et pour la chat, c'est un "String chatCelebre" au lien de nombre de dent

  11. #11
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par pony99 Voir le message
    @wassim_boy si tu regarde c'est exactement ce que j'ai mis.
    Il y a une différence entre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Animaux ls;
    if (type.equals("Chien")){
      ls = new Chien();
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Animaux ls;
     if (type.equals("Chien")){
      Chien ls = new Chien();
    Donc non, tu n'avais pas mis la même chose.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 86
    Points : 54
    Points
    54
    Par défaut
    comme a dit Robin56 ce n'est pas la même chose.

    c'est quoi l'objet AnimO ?

    je pense que la solution que je t'ai proposé devrait marché, quel est le problème une fois que tu as compilé la solution que je t'ai proposé?

  13. #13
    Membre du Club Avatar de pony99
    Femme Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Points : 69
    Points
    69
    Par défaut
    Oui c'est vrais Robin, chez moi je n'avais pas redéfinir la variable ls à chaque fois, mais en recopiant je me suis planté.

    Voici comment ça se présente chez moi.

    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
    public class BoutonEnvoyerProd implements ActionListener{
                  @Override
    		public void actionPerformed(ActionEvent e) {
    			 String type = (String) typeProd.getSelectedItem();
     
                              Animaux ls; // ajout de la solution de deathness
     
                             if (type.equals("Chien")){
                              ls = new Chien();
    			}
    			else if(type.equals("Chat")){
     
    				 ls = new Chat();
     
    			}
    			else if(type.equals("Canarie"){
     
    				 ls = new Canarie();
    			}
     
    			GroupeAnimaux.add(ls);
     
    			GroupeAnimaux.afficheProduit();
                          }
    	}
    Mias c'est l'avertissement qui m'inquiète a la ligne 21

    Type safety: The method add(Animaux) belongs to the raw type GroupeAnimaux. References to generic type GroupeAnimaux<AnimO> should be parameterized

  14. #14
    Membre du Club Avatar de pony99
    Femme Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Points : 69
    Points
    69
    Par défaut
    Citation Envoyé par wassim_boy Voir le message

    c'est quoi l'objet AnimO ?
    Regarde plus haut, c'est dans la classe GroupeAnimaux

    Donc dans la main je crée l'objet animO qui est le ArrayListe qui doit contenir tous les animaux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class Pg {
     
     
    	public static void main(String[] args) {
     
     
     
     
    	GroupeAnimaux<Animaux> AnimO = new GroupeAnimaux<Animaux>();
    		Fenetre fen = new Fenetre(AnimO);
     
    	}
     
    }
    je vais m'absenté pendant 2 ou 3h, dons je vous répondré en soirée.
    En tous cas merci bcp pour votre aide

  15. #15
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 540
    Points : 532
    Points
    532
    Par défaut
    AnimO est utilisé dans deux choses différente. Déjà dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class GroupeAnimaux <AnimO extends Animaux>
    A ce propos si GroupeAnimaux est une arrayList qui utilise uniquement des bbjets héritant de Animaux

    Tu peux simplement utiliser une ArrayList
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ArrayList<? extends Animaux> AnimO = new ArrayList<? extends Animaux>();
    Ensuite, AnimO est un objet (de type GroupeAnimaux) que tu transites un peu partout. Ce n'est pas étonnant que la ligne 21 affiche un avertissement, car en faisant GroupeAnimaux.add(ls), tu d'addresse à la classe et pas à l'instance de la classe.
    Autrement dit voila ce que 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
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    public class BoutonEnvoyerProd implements ActionListener{
                  @Override
    		public void actionPerformed(ActionEvent e) {
    			 String type = (String) typeProd.getSelectedItem();
     
                              Animaux ls; // ajout de la solution de deathness
     
                             if (type.equals("Chien")){
                              ls = new Chien();
    			}
    			else if(type.equals("Chat")){
     
    				 ls = new Chat();
     
    			}
    			else if(type.equals("Canarie"){
     
    				 ls = new Canarie();
    			}
     
    			AnimO .add(ls);//AnimO est un objet de typeGroupeAnimaux
     
    			AnimO .afficheProduit();//pareil ici
                          }
    	}

  16. #16
    Membre du Club Avatar de pony99
    Femme Profil pro
    Inscrit en
    Mars 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 161
    Points : 69
    Points
    69
    Par défaut
    effectivement cela fonctionne. youpiiiiiiiiii
    Merci énormément pour votre aide

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/03/2012, 22h12
  2. [MySQL] Problème avec la récupération d'une variable dans un lien pour un panier
    Par roy-mustang dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 23/06/2011, 13h58
  3. Réponses: 2
    Dernier message: 27/05/2010, 09h37
  4. Problème pour opération dans arraylist Integer
    Par bsangoku dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 30/04/2010, 17h40
  5. Des problèmes pour ajouter valeur dans une ArrayList
    Par Fused dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 07/11/2008, 16h28

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