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 :

comparer deux objets pas si simple ?


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    Points : 4
    Points
    4
    Par défaut comparer deux objets pas si simple ?
    Bonjour,

    J'ai besoin de quelqu'un qui en sait plus que moi pour m'aider à débloquer la situation.
    Je met le minimum de code pour être concis, ça devrait être, je l'espere, suffisant.
    Soit un jeux de bataille : 32 cartes.

    Dans la classe carte
    le constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Carte(String nom, int valeur, String couleur)
    	{
    		this.nom = nom;
    		this.couleur = couleur;
    		this.valeur = valeur;
    	}
    une methode String toString()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public String toString()
    	{
    		StringBuffer res = new StringBuffer();
    		return res.append(valeur).toString();
    	}

    Dans une autre classe JeuDeBataille je crée une liste de cartes qui sera ensuite partagée entre deux joueurs en LinkedList
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for (int i=0; i<tab1.length;i++)
    		{
    			paquetCarte.add(new Carte("Pique", tab1[i], "Noir"));
    			paquetCarte.add(new Carte("Coeur", tab2[i], "Rouge"));
    			paquetCarte.add(new Carte("Carreau", tab3[i], "Rouge"));
    			paquetCarte.add(new Carte("Trefle", tab4[i], "Noir"));
    		}
    Les valeurs qui vont m'intérésser sont les tab[i]

    La première moitié du paquet donc de la LinkedList paquetCarte va dans des LinkedList Cartejoueur1 et la seconde moitié dans Cartejoueur2.

    je crée deux itérateurs sur Cartejoueur1 et Cartejoueur2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		Iterator iterateur1 = Cartejoueur1.iterator();
    		Iterator iterateur2 = Cartejoueur2.iterator();
    le but est de comparer iterateur1.next() et iterateur2.next() lequel à la carte de plus grande valeur.

    Je n'arrive à ce moment qu'a utiliser un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(iterateur1.next().equals(iterateur2.next()))
    qui m'indique l'égalité (normal pour un equals) mais non la supérioté, ce que je cherche à avoir.

    Une méthode compareTo m'affiche dans mon ids
    La méthode compareTo(Object) du type Comparable ne s'applique pas aux arguments (Object,
    Object)
    Je vois bien que je compare un objet et que ça ne marche donc pas, comment alors transformé iterateur1.next() en type intéger afin de tenter la comparaison entre les valeurs (de l'objet carte : tab[i]) des cartes de chaque tas ?

    Quel serait la bonne méthode ?

  2. #2
    Membre habitué
    Inscrit en
    Juillet 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 152
    Points : 173
    Points
    173
    Par défaut
    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    new Integer(((Carte)iterateur1.next()).getValue())
       .compareTo(new Integer(((Carte)iterateur2.next()).getValue()))
    ce qui est extremement laid,

    soit faire en sorte que Carte implémente java.util.Comparable et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ((Carte)iterateur1.next()).compareTo((Carte)iterateur1.next())
    ce qui l'est moins

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci de ta réponse je vais voir si java bien.
    Si je peux me permettre il doit s'agir de l'interface java.lang.comparable

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    bon java mal pour l'instant, je suis néanmoins, je l'espère, sur la bonne piste.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Points : 234
    Points
    234
    Par défaut
    En effet, je ne pense pas que les algorithmes de l'api Java te permettent comparer deux objets de type Carte tel que tu veux le faire. Le plus simple est d'ajouter dans ta classe Carte une méthode compareTo(Carte), ou bien d'outrepasser la méthode hashCode() pour retourner une valeur absolue que tu pourras comparer.

Discussions similaires

  1. [Débutant] Comparer deux objets dans une liste
    Par lerieure dans le forum C#
    Réponses: 4
    Dernier message: 10/12/2012, 20h03
  2. Comparer deux objets
    Par adrienfehr dans le forum C#
    Réponses: 3
    Dernier message: 14/10/2008, 09h19
  3. Souci pour comparer deux objets avec equals()
    Par xillibit dans le forum Langage
    Réponses: 7
    Dernier message: 30/09/2007, 15h41
  4. Comparer deux images pas directement superposables
    Par Byhias dans le forum Images
    Réponses: 2
    Dernier message: 12/03/2007, 16h41
  5. comparer deux objets
    Par root76 dans le forum Langage
    Réponses: 7
    Dernier message: 16/01/2007, 10h34

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