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 :

Utilisation attributs d'objets d'1 ArrayList


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 36
    Par défaut Utilisation attributs d'objets d'1 ArrayList
    Bonjour.

    Dans une classe Sejour, je fais une liste des Sejour.
    Je parviens à afficher cette liste avec la méthode
    Sejour.afficherLesSejours();

    mais comment faire pour utiliser ou afficher les attribut de chaque Sejour de l'ArrayList ?

    Merci.

    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
     
    import java.util.*;
     
    public class Sejour
    {	// numero vol arrive unique, donc peut servir de cle pour sejour
    	private String numVolAr, numVolDep, codeA, numParking;
    	private static Horaire debut;
    	private static Horaire fin;
    	private static TrancheHoraire occupation;
    	private static List lesSejours = new ArrayList();
     
     
    	public Sejour()
    	{}
    ...
    	public static void afficherLesSejours()
    	{
    		Iterator i = lesSejours.iterator();
    		while (i.hasNext())
    		{
    			System.out.println(i.next());
    		}
    	}

  2. #2
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par défaut
    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
    import java.util.*;
     
    public class Sejour{ 
          // numero vol arrive unique, donc peut servir de cle pour sejour
          private String numVolAr, numVolDep, codeA, numParking;
          private  Horaire debut;
          private  Horaire fin;
          private  TrancheHoraire occupation;
          private  List lesSejours = new ArrayList<Sejour>();
     
     
          public Sejour(){
                ...
          }
     
          public static void afficherLesSejours()
          {
                Iterator i = lesSejours.iterator();
                while (i.hasNext()){
                      System.out.println(i.next().toString());
                }
          }
     
          public String toString(){
                return "Horaire Debut :"+debut.toString()+"\n"
                         + "Horaire fin :"+fin.toString()+"\n"
                         + "Tranche Horaire :"+occupation.toString()+"\n"
                         etc. ;
          }
    }

    Après il te reste juste a redéfinir la méthode toString() dans chacune de tes classes Horaire, TrancheHoraire etc.

    Il faut savoir que la méthode toString() est la méthode par défaut pour afficher des objets. Libre à toi dans tes classes de la redéfinir afin que les objets s'affichent comme tu le souhaite.

    Par exemple pour ta classe Horaire, tu peux rajouter quelque chose comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public String toString(){
          return this.hours+":"+this.minutes;
    }

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Salut,

    Tu n'es pas obligé pour résoudre ton problème mais si tu utilisers java 5 ou +, tu peux paramétrer ta liste avec un type en l'occurrence celui qui compose ta liste : Sejour .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static List<Sejour> lesSejours = new ArrayList<Sejour>();
    En paramétrant ta liste, lorsque tu souhaiteras itérer sur celle-ci, tu pourras naturellement itérer sur des objets typés (Sejour).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Iterator<Sejour> it = lesSejours.iterator();
    while (it.hasNext())
    {
    Sejour sejour = it.next();// Ici it.next() est typé Sejour
    System.out.println(sejour); 
    }
    Maintenant pour l'affichage c'est à toi de voir. tu as le choix entre :
    - redéfinir la méthode toString() de ta classe Sejour
    - décider toi même dans le System.out.println les champs que tu veux afficher (chose que tu peux faire plus naturellement si tu as un objet sejour, d'ou l'intérêt d'utiliser la liste paramétrée).

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 36
    Par défaut Résolu
    Super

    Grand merci pour les réponses, et la réactivité.
    J'essaie ça de ce pas.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 36
    Par défaut Presque résolu
    J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	public static void afficherLesSejours()
    	{
    		Sejour s;
    		Iterator<Sejour> it = lesSejours.iterator();
    		while (it.hasNext())
    		{
    			s=it.next();
    			s.getDebut();
     
    		}
    	}
    Il répond en ligne "s=it.next();" :
    Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to aeroport.Sejour
    at aeroport.Sejour.afficherLesSejours(Sejour.java:96)

    et effectivement, le retour de it.next ne renvoie pas le sejour en entier, mais sa clé.

  6. #6
    Membre éclairé
    Homme Profil pro
    NoOb
    Inscrit en
    Mai 2007
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NoOb

    Informations forums :
    Inscription : Mai 2007
    Messages : 554
    Par défaut
    Bonjour,

    Ta variable lesSejours est bien de type ArrayList<Sejour> ?

    PS : Penses à utiliser la balise CODE stp.

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Génoce a raison.
    Peut tu montrer toute la classe, cela serait plus simple

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 173
    Par défaut
    Je propose une solution pour concourner et non résoudre ton problème,

    Au lieu de passer par un itérateur, utilise des boucle for (ca me parait plus agréable)

    Ton code devient alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public static void afficherLesSejours(){
       for (Sejour s : lesSejours){
       s.getDebut();
       }
    }
    C'est plus léger non?

    Sinon pour ton code, Je pense qu'il serait plus simple que tu nous montres ton code en entier. Dans ton dernier post, tout me semble dans l'ordre.

    PS: n'oublie pas de préciser que c'est du code, pour cela, il suffit de clicker que # en haut de la zone de text, c'est plus agreable à lire

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 36
    Par défaut
    Citation Envoyé par amine_en_france Voir le message
    Je propose une solution pour concourner et non résoudre ton problème,

    Au lieu de passer par un itérateur, utilise des boucle for (ca me parait plus agréable)

    Ton code devient alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public static void afficherLesSejours(){
       for (Sejour s : lesSejours){
       s.getDebut();
       }
    }
    C'est plus léger non?

    Sinon pour ton code, Je pense qu'il serait plus simple que tu nous montres ton code en entier. Dans ton dernier post, tout me semble dans l'ordre.

    PS: n'oublie pas de préciser que c'est du code, pour cela, il suffit de clicker que # en haut de la zone de text, c'est plus agreable à lire
    ---------------

    Oups! Je ne savais pas
    La classe complète est ci dessous.
    J'ai modifié le public class() en
    public abstract class Sejour implements Comparable<Sejour>
    pour voir (je suis encore en pleine expérimentation).

    Du coup, l'appel new Sejour(num0, num1, avion, type, heure0, heure1, occupe);
    utilisé dans une autre classe n'est plus accepté. Bref, je vais passer une mauvaise nuit


    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
     
     
    //Fichier : Sejour.java
     
     
    import java.util.*;
     
    public abstract class Sejour implements Comparable<Sejour>
    {	// numero vol arrive unique, donc peut servir de cle pour sejour
    	private String numVolAr, numVolDep, codeA, numParking, typeA;
    	private static Horaire debut;
    	private static Horaire fin;
    	private static TrancheHoraire occupation;
    	private static ArrayList<Sejour> lesSejours = new ArrayList();
     
     
    	public Sejour()
    	{}
     
     
    	public Sejour(String narrive, String ndepart, String imAvion, String type, Horaire arrive, Horaire repart, TrancheHoraire occupe) 
    	{	// quand parking pas encore attribué
    		numVolAr=narrive;
    		numVolDep=ndepart;
    		codeA=imAvion;
    		typeA=type;
    		debut=arrive;
    		fin=repart;
    		occupation=occupe;
    		lesSejours.add(this);
    	}
     
    	public static void DebutFin()
    	{
    		debut=occupation.getDebutTrancheHoraire();
    		fin=occupation.getFinTrancheHoraire();
    	}
     
    	public TrancheHoraire getOccupation()
    	{
    		return occupation;
    	}
     
    	//
    	// Classer les Sejours par heure d'arrivée
    	//
     
    	public Horaire getDebut()
    	{
    		return debut;
    	}
     
    	public int CompareTo(Sejour ceSejour, Sejour autreSejour)
    	{
    	      int resultat=ceSejour.getDebut().compareTo(autreSejour.getDebut());
    	      return resultat;
    	}
     
    	public static void classerLesSejours()
    	{
    		Collections.synchronizedList(lesSejours);
    		Collections.sort(lesSejours, (Comparator) debut);
    	}
     
     
    	public static void afficherLesSejours()
    	{
    		Sejour s;
    		Iterator<Sejour> it = lesSejours.iterator();
    		while (it.hasNext())
    		{
    			s=it.next();
    			s.getDebut();
     
    		}
    	}
     
    	/*
    	public static void afficherLesSejours()
    	{
    	Iterator i = lesSejours.iterator();
    	while (i.hasNext())
    	{
    	System.out.println(i.next().toString());
    	}
    	}
    	*/
     
    	public String toString(){
    	      return (this.debut+":"+this.numVolAr);
    	}
     
     
     
    }

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 173
    Par défaut
    Citation Envoyé par lylandra6 Voir le message
    J'ai essayé :

    Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to aeroport.Sejour
    at aeroport.Sejour.afficherLesSejours(Sejour.java:96)
    Je parierai que lesSejours sont une liste de String et non une liste de Sejour.

    Non?

  11. #11
    Membre éclairé
    Homme Profil pro
    NoOb
    Inscrit en
    Mai 2007
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NoOb

    Informations forums :
    Inscription : Mai 2007
    Messages : 554
    Par défaut
    Citation Envoyé par amine_en_france Voir le message
    Je parierai que lesSejours sont une liste de String et non une liste de Sejour.

    Non?
    Tu prends pas beaucoup de risques .

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 36
    Par défaut
    Citation Envoyé par amine_en_france Voir le message
    Je parierai que lesSejours sont une liste de String et non une liste de Sejour.

    Non?
    Effectivement,
    j'y avais pas songé.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 36
    Par défaut
    Peut-être ai-je mal compris, j'ajoute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	public static void afficherLesSejours()
    	{
      	  Iterator i = lesSejours.iterator();
    	  while (i.hasNext())
    	  {
    	    System.out.println(i.next().toString());
    	  }
    	}
     
    	public String toString(){
    	      return (this.debut+":"+this.numVolAr);
    	}
    et il continue d'afficher numVolAr et pas debut+":"+numVolAr
    grrrr !

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 28/05/2008, 02h06
  2. Réponses: 4
    Dernier message: 19/06/2007, 10h41
  3. [C#] Tri d'objet dans une ArrayList
    Par guillaume16 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 14/03/2006, 12h05
  4. Message d'erreur lors d'utilisation d'un Objet
    Par dirty_boy dans le forum Langage
    Réponses: 3
    Dernier message: 28/10/2005, 16h16
  5. Réponses: 4
    Dernier message: 25/10/2005, 08h48

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