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

API standards et tierces Java Discussion :

Probleme avec indexof


Sujet :

API standards et tierces Java

  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 354
    Par défaut Probleme avec indexof
    Bonjour,

    J'essaie de recuperer l'index d'un element dans une List et cela ne fonctionne pas. Pouvez vous m'aider ?

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dossier1 = (DossierResultat) session.getAttribute("dossier");
     
    structure = (StructureApplication) req.getSession().getServletContext().getAttribute("structureApplication");
     
    int index = structure.getDossiers().indexOf(dossier1);
    dossier = (Dossier) structure.getDossiers().get(index);

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Citation Envoyé par lilli1407
    et cela ne fonctionne pas.
    C'est à dire ???


    a++

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 354
    Par défaut
    Il me renvoit un index = - 1 alors que l'objet se trouve bien dans la liste

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    As-tu implémenté la méthode equals() de tes objets ?

    a++

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 354
    Par défaut
    Citation Envoyé par adiGuba
    As-tu implémenté la méthode equals() de tes objets ?

    a++
    non, comment faut il faire ?

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par lilli1407
    non, comment faut il faire ?
    http://www.developpez.net/forums/sho...4&postcount=58

    Par exemple

    a++

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 354
    Par défaut
    Voila je vient de modifier ma classe dossier comme suit

    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
    public class Dossier {
     
    	private String nom;
    	private String description;
    	private List familles;
    	private ArrayList clefDossier;
     
    	public String getDescription() {
    		return description;
    	}
    	public void setDescription(String description) {
    		this.description = description;
    	}
    	public List getFamilles() {
    		return familles;
    	}
    	public void setFamilles(List familles) {
    		this.familles = familles;
    	}
    	public String getNom() {
    		return nom;
    	}
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
    	public ArrayList getClefDossier() {
    		return clefDossier;
    	}
    	public void setClefDossier(ArrayList clefDossier) {
    		this.clefDossier = clefDossier;
    	}
     
     
    	public boolean equals(Object obj) {
            // Vérification de l'égalité des références
            if (obj==this) {
                return true;
            }
     
            // Vérification du type du paramètre
            if (obj instanceof Dossier) {
                // Vérification des valeurs des attributs
                Dossier other = (Dossier) obj;
     
                // Pour les attributs de type objets 
                // on compare dans un premier temps les références 
                if (this.getNom() != other.getNom()) {
                    // Si les références ne sont pas identiques
                    // on doit en plus utiliser equals()
                    if (this.getNom() == null || !this.getNom().equals(other.getNom())) {
                        return false; // les attributs sont différents 
                    }
                }
     
                // Si on arrive ici c'est que tous les attributs sont égaux :
                return true;
            }
     
            return false;
        }
     
     
     
     
    }
    Comment dois-je faire maintenant ?

  8. #8
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par lilli1407
    Comment dois-je faire maintenant ?
    Ben c'est tout... (sauf qu'il est conseillé d'implémenté hashcode() dans le même temps)

    Mais avec une List cela devrait marcher... si ce n'est pas le cas vérifie ce que te renvoi equals() entre ces deux instances...

    a++

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 354
    Par défaut
    Mais je veux dire comment je l'appelle dans le code que j'ai mis mis au debut ? J'ai rien à changer ?

  10. #10
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par lilli1407
    Mais je veux dire comment je l'appelle dans le code que j'ai mis mis au debut ? J'ai rien à changer ?
    Non : equals() est utilisé par indexOf() (faut lire la doc ).


    a++

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 354
    Par défaut
    Citation Envoyé par adiGuba
    Non : equals() est utilisé par indexOf() (faut lire la doc ).


    a++
    mais ca ne marche pas.

    Petite precision je suis en version 1.4.2 et donc je n'ai pas le droit à @Override. Est-ce que c'est pour ça ?

    Desolée je suis un peu perdu sur ce coup là

  12. #12
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par lilli1407
    mais ca ne marche pas.
    As-tu vérifié ce que te renvoi equals() entre ces deux instances ???

    Citation Envoyé par lilli1407
    Petite precision je suis en version 1.4.2 et donc je n'ai pas le droit à @Override. Est-ce que c'est pour ça ?
    Non @Override est juste à titre informatif, sa présence ne modifie en rien le code...

    a++

  13. #13
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 354
    Par défaut
    Citation Envoyé par adiGuba
    As-tu vérifié ce que te renvoi equals() entre ces deux instances ???
    Comment ça ?

  14. #14
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par lilli1407
    Comment ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tonObjet.equals( tonObject2QuidoitEtreIdentique );
    a++

  15. #15
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 354
    Par défaut
    Citation Envoyé par adiGuba
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tonObjet.equals( tonObject2QuidoitEtreIdentique );
    a++
    Et bien ca semble renvoyer "false" tout le temps!!!! je comprends pas pourquoi!!

    Peut-etre avez vous une idee ?

  16. #16
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    Salut,

    DossierResultat herite bien de Dossier ?

    et pis je sais ce qu'en pense adiGuba, mais je ferai une methode equals bien plus simple du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public boolean equals(Object obj) {
          boolean res = false;
     
            if (obj instanceof Dossier) {
                Dossier other = (Dossier) obj;
     
                if (this.nom.equals( other.nom ) ){
                   res = true;
                }
            }
     
            return res;
    }
    Le fait de tester que l'instance1 soit en fait aussi l'instance2 ne nous interesse pas plus que ca, et pis ca rajoute des tests

  17. #17
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 354
    Par défaut
    Merci à tous les deux!!! Je viens de trouver mon erreur : les beans que je comparaient n'etaient pas du meme type (un dossier et un dossierresultat)

  18. #18
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par BainE
    DossierResultat herite bien de Dossier ?
    Bonne remarque : je n'avais pas vu qu'il s'agissait de type différent...

    et pis je sais ce qu'en pense adiGuba, mais je ferai une methode equals bien plus simple du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public boolean equals(Object obj) {
          boolean res = false;
     
            if (obj instanceof Dossier) {
                Dossier other = (Dossier) obj;
     
                if (this.nom.equals( other.nom ) ){
                   res = true;
                }
            }
     
            return res;
    }
    Citation Envoyé par BainE
    Le fait de tester que l'instance1 soit en fait aussi l'instance2 ne nous interesse pas plus que ca, et pis ca rajoute des tests
    Cela permet d'éviter un instanceof et des vérifications supplémentaires (eventuellement couteuse) lorsqu'on compare la même instance (les comparaisons d'instanse sont bien plus rapide puisque cela équivaut à comparer deux "pointeurs").

    Même chose pour les attributs... De plus dans ton cas tu présumes que this.nom n'est jamais null ce qui n'est pas forcément vrai (après cela dépend donc de tes classes).

    a++

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

Discussions similaires

  1. [C#] Problème avec .indexOf()...
    Par FoxDeltaSierra dans le forum ASP.NET
    Réponses: 7
    Dernier message: 20/10/2005, 21h53
  2. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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