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

Langage Java Discussion :

Tri sélectif de nombres


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Points : 19
    Points
    19
    Par défaut Tri sélectif de nombres
    Bonjour, je recherche une méthode de tri efficace...j'ai beaucoup cherché mais je n'ai rien trouvé de probant...je ne sais pas s'il existe une astuce simple pour trier des nombres dans un ordre croissant ou décroissant.
    Considérant la classe Nombre
    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
    class Nombre {
        // Variables d'instance :
        public int nombre;
        // Constructeur :
        public Nombre(int nombre) {
            setNombre(nombre);
        }
     
        protected Nombre setNombre(int nombre) {
            this.nombre = nombre;
            return this;
       }
     
        public int getNombre() {
            return this.nombre;
        }
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    LinkedList nbre = new LinkedList();
    nbre.add(new Nombre(11));
    nbre.add(new Nombre(2));
    nbre.add(new Nombre(29));
    nbre.add(new Nombre(199));
    nbre.add(new Nombre(3));
    Ensuite je place dans une LinkedList, cinq nouvelles instances de la classe Nombre et je voudrais les trier par ordre décroissant dans une nouvelle LinkedList.

    Quelqu'un a t il une astuce simple pour arriver parce que je tourne en rond et je n'ai rien obtenu de très bon pour le moment...

    Merchhi...

  2. #2
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    LinkedList nbre = new LinkedList();
    Collections.sort(nbre);
    Sinon, si tu veux implémenter toi-même les algo, cherche du côté du tri-fusion ou du tri par insertion ou Quicksort avec (mais il va falloir passer par un tableau pour trier les éléments --> plus efficace)

    [Edit :] bien sûr, il faut que tes Nombres soit comparables pour que sort fonctionne :
    Javadoc a dit :
    All elements in the list must implement the Comparable interface. Furthermore, all elements in the list must be mutually comparable (that is, e1.compareTo(e2) must not throw a ClassCastException for any elements e1 and e2 in the list).
    La différence entre la théorie et la pratique est plus mince en théorie qu'en pratique

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    Thanks...je vais regarder cela de plus près...

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    Euh pardonne moi si je dis une bêtise mais il est préférable que je réimplémente la méthode compareTo() alors pour que mes objets soient comparables...en gros faire de l'overloading? Sinon je ne pense pas que la méthode compareTo() de java donne un résultat significatif?

  5. #5
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    en gros faire de l'overloading?
    en gros, juste implémenter la méthode de l'Interface Comparable (avec Nombre implements Comparable)


    au fait ,
    tu entends quoi par
    la méthode compareTo() de java...
    ?
    La différence entre la théorie et la pratique est plus mince en théorie qu'en pratique

  6. #6
    Membre régulier Avatar de spoutyoyo
    Inscrit en
    Avril 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 116
    Points : 83
    Points
    83
    Par défaut
    Il faut que ta classe Nombre implement Comparable et il faut redéfinir ensuite la méthode compareTo() afin de comparer deux Nombres entre eux.
    http://www.stop-monsanto.qsdf.org/

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    En fait pour utiliser la méthode Collection.sort(maCollection); je demandais si je devais réimplémenter la méthode compareTo() de Java...je pensais que je devais réimplémenter la méthode compareTo() pour qu'elle puisse comparer mes objets Nombre et que cette méthode était incluse dans l'implémentation de la méthode Collections.sort(Collection newOne)...

    en gros, juste implémenter la méthode de l'Interface Comparable (avec Nombre implements Comparable)
    C'est à dire? Je débute donc évite d'utiliser des mots compliqués

    EDIT : ah oui donc je dois réimplémenter compareTo() dans me classe Nombre pour que la nouvelle implémentation de celle ci prime sur celle de Java?

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,

    Je n'ai même pas lu ton message, je ne te donnerais donc pas de solution.

    Je me contente de réagir au titre:
    Citation Envoyé par Sylvester
    Tri sélectif de nombres
    Par définition, un tri est sélectif.
    Compilation sans erreur ne signifie pas programme sans erreur.
    L'indentation n'a pas été imaginée pour faire beau, mais pour faciliter la lecture des programmes.

  9. #9
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    Je pense que tu y est dans l'idée...

    ce que contient ta collection doit être en mesure de se placer (de s'ordonner dans ton cas) par rapport à d'autres objets. Il doit implémenter les méthode de l'interface Comparable et doit se présenter ainsi :
    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
     
    class Nombre implements Comparable{
        // Variables d'instance :
        public int nombre;
        // Constructeur :
        public Nombre(int nombre) {
            setNombre(nombre);
        }
     
        protected Nombre setNombre(int nombre) {
            this.nombre = nombre;
            return this;
       }
     
        public int getNombre() {
            return this.nombre;
        }
    }
    Tel qu'écrit au dessus, le code n'est pas compilable, car le contrat qui lit Nombre à l'interface Comparable n'est pas rempli (Il n'y a pas de méthode compareTo())
    Tu dois donc ajouter cette méthode en écrivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	public int compareTo(Object arg0) {
    		//effet par défaut, il te faut écrire ce que fait la méthode
    		return 0;
    	}
    Voici ce que dois retourner ta méthode :
    compareTo
    Javadoc a dit :
    public int compareTo(Object o)
    Compares this object with the specified object for order. Returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
    La différence entre la théorie et la pratique est plus mince en théorie qu'en pratique

  10. #10
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 60
    Points : 55
    Points
    55
    Par défaut
    salut,

    je vois que tout le monde tourne autour du pot sans donner la ligne de code qui fait marcher :
    Voici ce qu'il faut 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
    27
     
    class Nombre implements Comparable<Nombre> {
        // Variables d'instance :
        public int nombre;
        // Constructeur :
        public Nombre(int nombre) {
            setNombre(nombre);
        }
     
        protected Nombre setNombre(int nombre) {
            this.nombre = nombre;
            return this;
       }
     
        public int getNombre() {
            return this.nombre;
        }
     
        public int compareTo(Nombre anotherNombre) {
            if (this.nombre > anotherNombre.getNombre())
                return 1;
            if (this.nombre < anotherNombre.getNombre())
                return -1;
            if (this.nombre == anotherNombre.getNombre())
                return 0;
        }
    }
    J'ai pas teste ce code mais je crois que ca marche a vue de nez.
    Ceci dit, je trouve que tout ca n'est pas super elegant : il existe deja la classe Integer par exemple qui fait du wrapping d'entier et qui implemente deja Comparable et tout, et qui marchera donc directement pour ton histoire de tri.
    Voila, j'espere que j'ai ete clair.

    yelbied

  11. #11
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    sinon :


    ^^

    Fred
    Développeur Java / Flex à Shanghai, Chine
    mes publications
    Mon dernier tutoriel : Messages Quit IRC : explications

    La rubrique IRC recrute des redacteurs : contactez moi

    Ce flim n'est pas un flim sur le cyclimse. Merci de votre compréhension.[/SIZE]

  12. #12
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    je vois que tout le monde tourne autour du pot sans donner la ligne de code qui fait marcher :
    Voici ce qu'il faut faire:
    et la pédagogie, alors ?
    La différence entre la théorie et la pratique est plus mince en théorie qu'en pratique

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

Discussions similaires

  1. [XL-2007] Comparaison de colonnes et tri sélectif
    Par guyCnet dans le forum Excel
    Réponses: 1
    Dernier message: 16/08/2010, 20h15
  2. Tri sélectif sur deux datagridview indépendant
    Par jdelestre dans le forum VB.NET
    Réponses: 2
    Dernier message: 16/06/2009, 16h28
  3. [Débutant] tri sélectif de matrices par rapport à un vecteur
    Par Lalaine dans le forum MATLAB
    Réponses: 4
    Dernier message: 26/03/2009, 21h27
  4. [CR10] Faire un tri selon un nombre de caractères
    Par John0123 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 02/10/2008, 15h04
  5. tri selon le nombre d'enregistrement
    Par bugbug dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/12/2005, 13h57

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