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 :

sous ensemble dans une liste


Sujet :

avec Java

  1. #1
    En attente de confirmation mail
    Inscrit en
    Septembre 2009
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 269
    Points : 96
    Points
    96
    Par défaut sous ensemble dans une liste
    Bonjour,

    voici une classe :

    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
     
    class Rep implements Comparable<Rep> { 
    	private String nom;
    	private int age;
     
    	Rep(String nomf, int agef) {
    		nom=nomf;
    		age=agef;
    	}
     
    	public String getnom() {
    		return nom;
    	}
     
    	public int getage() {
    		return age;
    	}
     
    	public int compareTo(Rep o) {			
    		if( this.age < o.getage()) return 1;
    		if( this.age == o.getage()) return 0;
    		else return -1;
    	};	
    }
    J'instancie cette classe dans des objets que je range dans une liste avec add:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List<Rep> vf = new ArrayList<Rep>();
    et je la trie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Collections.sort(vf);
    Il est sur que plusieurs personnes auront le même age, comment faire pour associer à chaque nom le nombre d'individus qui ont le même age que lui ?

    Merci !

  2. #2
    En attente de confirmation mail
    Inscrit en
    Septembre 2009
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 269
    Points : 96
    Points
    96
    Par défaut
    Je précise que je trie sur l'âge, bien sûr.

  3. #3
    Membre émérite
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Points : 2 814
    Points
    2 814
    Par défaut
    Plop,

    Ce que tu cherches à faire est d'associer un age à un ensemble de personnes ?

    Si oui, la classe HashMap est faites pour cela. Elle a pour but d'associer une clé à une valeur.

    Donc tu peux créer une
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HashMap<Integer, List<Rep>> h = new HashMap<Integer, List<Rep>>();
    . Ainsi tu associes un age à une liste de Rep.

    Si tu veux néanmoins garder ta liste je te conseille de faire cela :
    - Revoir le compareTo et écrire tout simplement (même si ce n'est pas important)
    - Après avoir trié ta liste, tu peux la parcourir et compter manuellement le nombre de références du même age.

  4. #4
    En attente de confirmation mail
    Inscrit en
    Septembre 2009
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 269
    Points : 96
    Points
    96
    Par défaut
    Bonjour

    merci, je vais tenté ta première proposition, mais je ne pige pas la deuxième!

  5. #5
    En attente de confirmation mail
    Inscrit en
    Septembre 2009
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 269
    Points : 96
    Points
    96
    Par défaut
    Rebonjour,

    Désolé, Olivier.Pitton, je n'avais pas bien vu ta réponse, je ne cherche pas à associer un âge à un ensemble de personnes, mais pour une personne, obtenir le nombre de ses congénères ayant le même âge qu'elle.

    J'aurais préféré que ce soit ça, mais non.

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 133
    Points : 109
    Points
    109
    Par défaut
    Suffit de parcourir toute ta liste, et de comparer les âges des objets de ta liste avec celui de ton this grâce au compareTo.

  7. #7
    En attente de confirmation mail
    Inscrit en
    Septembre 2009
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 269
    Points : 96
    Points
    96
    Par défaut
    Bonjour, merci,

    Mais pour que le résultat soit disponible, pour chaque objet, par un get, il faut modifier la classe, ou bien comment stocker l'effectif de "la classe d'age" (bien que ce ne soit pas une classe d'age, mais tout simplement un age).
    Il faut pouvoir le demander, si utile !

  8. #8
    En attente de confirmation mail
    Inscrit en
    Septembre 2009
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 269
    Points : 96
    Points
    96
    Par défaut
    J'ai un peu peur de faire de la cuisine, donc je pose ma question d'abord :
    Il faut utiliser sort une fois, puis une deuxieme fois, en modifiant compareTo ?

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 133
    Points : 109
    Points
    109
    Par défaut
    Qu'entends tu pars "modifier la classe" ?

    Tu veux bien avoir une méthode getMemeAge() qui te renvoi le nombre de personnes ayant le même âge que ton objet ?

  10. #10
    En attente de confirmation mail
    Inscrit en
    Septembre 2009
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 269
    Points : 96
    Points
    96
    Par défaut
    Merci, je vais faire un essai !

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Points : 417
    Points
    417
    Par défaut
    C'est moi ou de l'extérieur cette conversation n'a ni queue ni tête?

    Résumons : le but c'est de connaître les personnes qui ont le même âge qu'une personne données.

    Pour ça tu as plusieurs solutions :
    1 - utiliser une Map
    2 - utiliser une liste triée sur l'âge
    3 - utiliser une liste quelconque

    1 : Il faut que tu crée une map comme suggéré par Olivier. Quand tu veux ajouter une personne, tu la "range" dans la bonne catégorie en faisant :
    map.get(ageDeLaPersonne).add(laPersonneAAjouter);
    Quand tu veux obtenir la liste des personnes ayant l'age "a", tu fais :
    map.get(a);

    2 : Pour cela il faut comprendre comment marche la fonction "sort" en Java. Je te laisse regarder des articles sur le net. Sache simplement qu'il va falloir modifier la fonction compareTo. C'est pour cette raison que cette fonction a été mentionnée par Olivier.

    3 : Tout simple : tu parcours ta liste à la recherche des personnes du même âge que la personne en question. Il s'agit d'une simple boucle for.

    Il y a encore d'autres façon de faire, mais pour ton cas, je pense que celles-ci sont suffisantes.

  12. #12
    En attente de confirmation mail
    Inscrit en
    Septembre 2009
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 269
    Points : 96
    Points
    96
    Par défaut
    Bonjour,

    Voici le code que j'ai écrit, en m'inspirant de la proposition de Sharcoux :

    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
     
    import java.util.*;
     
    class Rep implements Comparable<Rep> { 
    	private String nom;
    	private int age;
     
    	Rep(String nomf, int agef) {
    		nom=nomf;
    		age=agef;
    	}
     
    	public String getnom() {
    		return nom;
    	}
     
    	public int getage() {
    		return age;
    	}
     
    	public int compareTo(Rep o) {			
    		if( this.age < o.getage()) return 1;
    		if( this.age == o.getage()) return 0;
    		else return -1;
    	};	
    }
     
    public class Memeage 
    	{
    	public static void main(String args[])
    		{
    		List<Rep> vf = new ArrayList<Rep>();
    		HashMap<Integer, List<Rep>> h = new HashMap<Integer, List<Rep>>();
     		int j=0;int i=0;
    		for(j=0; j<21;j++)
    			{
    			h.get(2*j).add(j);
    			}
     
    		for(j=2; j<=42;j++)
    			{
    			int nbj;
    			nbj=h.get(j);
    			System.out.print("*"+j+"*");
    			System.out.println();
    			}
    		}
    	}
    et, j'ai cette réponse :
    memeage.java:36: cannot find symbol
    symbol : method add(int)
    location: interface java.util.List<Rep>
    h.get(2*j).add(j);
    ^
    memeage.java:42: incompatible types
    found : java.util.List<Rep>
    required: int
    nbj=h.get(j);
    ^
    2 errors
    Je ne sais pas si j'ai vraiment appliqué les suggestions, et je suis sans doc efficace,
    Qu'en pensez vous ?
    pour comprendre le 2*j, j'ai décidé que l'age était 2 fois la valeur de l'identifiant qui sera un String, bien sûr quand j'aurais compris, (c'est plutôt au stade expérimental !!!).

    Merci si vous me portez secours, je pense en avoir un peu besoin !

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Points : 417
    Points
    417
    Par défaut
    En fait, je crois que tu as mal compris les solutions qui t'on été proposées.

    Si tu souhaite utiliser la HashMap, il faut que tu ajoutes à l'avance tes Rep à une HashMap static lors de leur création. Dans ton cas, cette méthode ne semble pas pertinente. Je te conseille donc les autres solutions à base de listes.

    Pour info :

    h.get(2*j).add(j) ne fonctionne pas parce que tu fais h.get(x) renvoie un List<Rep>. Sur un tel élément, tu dois faire un add(y) avec y de type Rep. Or ici j est de type int. Ca ne va pas.

    On pourrait imaginer par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    h.get(2*j).add(new Rep("truc",10));

  14. #14
    En attente de confirmation mail
    Inscrit en
    Septembre 2009
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 269
    Points : 96
    Points
    96
    Par défaut
    Rebonjour,

    Poursuivant ma recherche, j'obtiens ceci :

    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
     
    import java.util.*;
     
    class Rep implements Comparable<Rep> { 
    	private String nom;
    	private int age;
     
    	Rep(String nomf, int agef) {
    		nom=nomf;
    		age=agef;
    	}
     
    	public String getnom() {
    		return nom;
    	}
     
    	public int getage() {
    		return age;
    	}
     
    	public int compareTo(Rep o) {			
    		if( this.age < o.getage()) return 1;
    		if( this.age == o.getage()) return 0;
    		else return -1;
    	};	
    }
     
    public class Memeage1 
    	{
    	public static void main(String args[])
    		{
    		HashMap<Integer, List<Rep>> h = new HashMap<Integer, List<Rep>>();
    		Rep r=new Rep("Pierre", 12);
    		h.get(r.getage()).add(r.getnom());
    		Rep r1=new Rep("Pierre", 12);
    		h.get(r1.getage()).add(r1.getnom());
    		Rep r2=new Rep("Michelle", 12);
    		h.get(r2.getage()).add(r2.getnom());
     
     
    		int nbj;
    		nbj=h.get(12);
    		System.out.print("*"+nbj+"*");
    		System.out.println();
     
    		}
    	}
    je cherche à rester dans la méthode conseillée, mais la méthide add n'est pas reconnu et
    me donne une incompatibilité

    je sais que j'insiste, mais c'est agaçant !

  15. #15
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 75
    Points : 138
    Points
    138
    Par défaut
    Bonjour,


    Est incompatible car h.get(12) renvoie une List<Rep>.
    Pour avoir le nombre de personne il faudra faire un size sur la List.

  16. #16
    En attente de confirmation mail
    Inscrit en
    Septembre 2009
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 269
    Points : 96
    Points
    96
    Par défaut
    Bonjour,
    merci pour ta réponse.
    Mais un size sur la liste me renverrait le nb de personne de la liste mais si je veux le nombre de personnes d'un age particulier ?

  17. #17
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 75
    Points : 138
    Points
    138
    Par défaut
    La list que tu recupere avec h.get(12) est la list des personnes ayant 12ans.
    Donc en faisant h.get(12).size() tu auras bien le nombre de personne ayant 12ans.

  18. #18
    En attente de confirmation mail
    Inscrit en
    Septembre 2009
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 269
    Points : 96
    Points
    96
    Par défaut
    Bien vu, size() rétablit la compatibilité,
    mais je reste avec add pas identifiée !

  19. #19
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 75
    Points : 138
    Points
    138
    Par défaut
    Alors,

    Je pense que c'est que ta List n'est pas initialise.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    HashMap<Integer, List<Rep>> h = new HashMap<Integer, List<Rep>>();
    Rep r=new Rep("Pierre", 12);
    h.put(r.getage(), new List<Rep>())
    h.get(r.getage()).add(r.getnom());
    Par contre il faudra le faire que la premier fois pour chaque age sinon cela va reset la list.

    ps: Je pense qu'il y avait plus facile que le HashMap, mais maitenant qu'on est parti comme ca.

  20. #20
    En attente de confirmation mail
    Inscrit en
    Septembre 2009
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 269
    Points : 96
    Points
    96
    Par défaut
    J'ai trouvé, je n'ajoutais pas la personne mais son nom, voici le code, maintenant :

    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
     
    import java.util.*;
     
    class Rep implements Comparable<Rep> { 
    	private String nom;
    	private int age;
     
    	Rep(String nomf, int agef) {
    		nom=nomf;
    		age=agef;
    	}
     
    	public String getnom() {
    		return nom;
    	}
     
    	public int getage() {
    		return age;
    	}
     
    	public int compareTo(Rep o) {			
    		if( this.age < o.getage()) return 1;
    		if( this.age == o.getage()) return 0;
    		else return -1;
    	};	
    }
     
    public class Memeage1 
    	{
    	public static void main(String args[])
    		{
    		HashMap<Integer, List<Rep>> h = new HashMap<Integer, List<Rep>>();
    		Rep r=new Rep("Pierre", 12);
    		h.get(r.getage()).add(r);
    		Rep r1=new Rep("Pierre", 12);
    		h.get(r1.getage()).add(r1);
    		Rep r2=new Rep("Michelle", 12);
    		h.get(r2.getage()).add(r2);
     
     
    		int nbj;
    		nbj=h.get(12).size();
    		System.out.print("*"+nbj+"*");
    		System.out.println();
     
    		}
    	}
    mais, j'ai un NullPointerException dans la main()

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 9
    Dernier message: 17/11/2010, 12h06
  2. Lister mes sous-sites dans une liste
    Par rohstev dans le forum Développement Sharepoint
    Réponses: 2
    Dernier message: 09/11/2010, 16h49
  3. [AC-2007] Sous-titres dans une liste déroulante
    Par al_bert dans le forum IHM
    Réponses: 7
    Dernier message: 19/05/2009, 15h21
  4. [LINQ To Object] Sous-ensemble d'une liste
    Par farfadet dans le forum Linq
    Réponses: 6
    Dernier message: 17/11/2008, 23h31
  5. sous ensemble d'une liste
    Par adel25 dans le forum C++
    Réponses: 1
    Dernier message: 23/08/2005, 15h50

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