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 d'un vector ?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Par défaut tri d'un vector ?
    Bonjour à tous

    il y a qqch que je n'arrive pas vraiment à faire...

    il s'agit, dans un petit jeu, de sauvegarder un tableau de highscore

    chaque score, est en fait un objet contenant
    - un nom
    - un temps
    - le score lui même

    le tout dans un Vector, que j'affiche dans des composants Swing grace à une boucle

    or j'aimerais pouvoir trier ce tableau, soit en fonction du temps, ou du score à la discrétion de l'utilisateur.

    mais pas moyen... c'est la première fois que je fais se genre de chose.

    Pourriez vous me mettre sur la voie ?

    merci beaucoup.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Par défaut
    Bonjour,

    As-tu jeté un oeil à la méthode proposée dans la FAQ ?
    http://java.developpez.com/faq/java/...rierCollection

    Nicolas

  3. #3
    Membre émérite Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Par défaut
    ben justement, j'ai une erreur avec

    on dirait qu'il faut utiliser, contrairement à ce que dit la faq ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class voiture implements Comparator {
     
    //classe à implémenter
    public int compare(Object arg0, Object arg1) {
     
    		return 0;
    	} 
    }

  4. #4
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Bonjour,

    je suppose que ton highscore est représenté ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class HighScore {
     
      private String nom;
      private int temps;
      private int score;
     
      ...
    }
    Tu disposes donc d'un Vector de HighScore. Soit
    Pour trier en fonction du nom, du temps, ou du score, tu dois faire qq chose comme ça :
    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
    Collections.sort(highscore, new Comparator() {
      public int compare(Object o1, Object o2) {
        return ((HighScore) o1).getNom().compareTo(((HighScore) o2).getNom());
      }
    }
     
    Collections.sort(highscore, new Comparator() {
      public int compare(Object o1, Object o2) {
        return ((HighScore) o1).getTemps() - ((HighScore) o2).getTemps();
      }
    }
     
    Collections.sort(highscore, new Comparator() {
      public int compare(Object o1, Object o2) {
        return ((HighScore) o1).getScore() - ((HighScore) o2).getScore();
      }
    }

  5. #5
    Membre émérite Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Par défaut
    oups
    j'ai dis des bêtises sur Comparable





    je vais tester ta proposition herve91, merci bien

  6. #6
    Membre émérite Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Par défaut
    et bien ça ne marche pas terrible...


    je récapitule :

    j'ai une classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class YAD_Score implements java.io.Serializable{
    	private int score;
    	private String name;
    	private int temps;
    [...]
    }
    ensuite je manipule un Vector de YAD_Score.
    ce vecteur, je le serialise pour sauvegarder le tout.



    j'ai donc ailleurs ce genre de chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    this.read();
    		if(scores.size()==0){
    			JOptionPane.showMessageDialog(null, "Aucune partie n'a encore été jouée");
    		}else{
    			Collections.sort(scores, new Comparator(){
    				public int compare(Object arg0, Object arg1) {
    					return ((YAD_Score) arg0).getScore() - (((YAD_Score) arg1).getScore()); 
    				}
    			});
    			this.affiche();
    		}
    où this.read() charge le Vector serialisé (scores)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private void read() {
    		try {
    			ObjectInputStream in = new ObjectInputStream(new FileInputStream(new File("Highscore.sav")));
    			this.scores = (Vector)in.readObject();
    			in.close();
    		} catch( ClassNotFoundException e1 ) {
    			System.err.println("File not found");
    		} catch( IOException e2 ) {
    			System.err.println("read : I/O error");
    			System.err.println(e2);
    }
    j'ai beau essayé de comparer sur le temps, ou le score, rien du tout...

    le Vector est dans l'ordre à laquel je l'avais laissé.



    edit : si je demande à YAD_Score d'implémenter Comparable, comme dans la faq, la sérialisation ne fonctionne plus

  7. #7
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Chez moi, le code suivant fonctionne.

    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
    public class Test {
     
       class YAD_Score implements java.io.Serializable{ 
       private int score; 
       private String name; 
       private int temps;
     
       public YAD_Score(int score, String name, int temps) {
           this.score = score;
           this.name = name;
           this.temps = temps;
       }
       public int getScore() {
           return score;
       }
       public String toString() {
           return name + " " + score;
       }
       }
     
       Vector scores = new Vector();
       Vector scores2;
     
        public Test() {
            scores.add(new YAD_Score(100, "toto", 10));
            scores.add(new YAD_Score(200, "tot", 10));
            scores.add(new YAD_Score(50, "to", 10));
            scores.add(new YAD_Score(300, "t", 10));
     
            try {
            ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(new File("Highscore.sav"))); 
            out.writeObject(scores); 
            out.close();
     
            ObjectInputStream in = new ObjectInputStream(new FileInputStream(new File("Highscore.sav"))); 
            this.scores2 = (Vector) in.readObject(); 
            in.close(); 
     
            Collections.sort(scores2, new Comparator(){ 
                public int compare(Object arg0, Object arg1) { 
                   return ((YAD_Score) arg0).getScore() - (((YAD_Score) arg1).getScore()); 
                } 
             });
     
             for (int i = 0; i < scores2.size(); i++) {
                 System.out.println(scores2.get(i));
             }
            } catch (FileNotFoundException fnfex) {
            } catch (IOException ioex) {
            } catch (ClassNotFoundException cnfex) {
            }
        }
     
        public static void main(String args[]) {
            new Test();
        }
    }

  8. #8
    Membre émérite Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Par défaut
    ah oui effectivement ça fonctionne

    j'avais fait une erreur ailleurs.


    Merci beaucoup

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

Discussions similaires

  1. Problème de tri sur un vector.
    Par AF_2.8 dans le forum SL & STL
    Réponses: 3
    Dernier message: 05/05/2011, 10h07
  2. Tri d'une matrice (entrée sous forme de vector)
    Par MoiJF dans le forum Débuter
    Réponses: 6
    Dernier message: 27/04/2009, 05h36
  3. Insérer au bon endroit dans un <vector> trié
    Par camboui dans le forum SL & STL
    Réponses: 12
    Dernier message: 17/06/2008, 11h39
  4. Tri dans des vector
    Par rikau2 dans le forum C++
    Réponses: 7
    Dernier message: 20/08/2007, 16h58
  5. tri sur std::vector<std::pair<int, float> >
    Par b4u dans le forum SL & STL
    Réponses: 15
    Dernier message: 01/10/2006, 09h19

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