Problème (simple ??) avec un ArrayList

Résolu
Le_Novice Messages postés 3 Date d'inscription vendredi 20 janvier 2006 Statut Membre Dernière intervention 3 mars 2007 - 3 mars 2007 à 22:10
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 4 mars 2007 à 00:45
Bonjour,
J'ai un problème avec la mise en place d'Arraylist et son parcours

Pour simplifier, j'utilise 3 classes (ici amputer de lignes peu "importantes")  :
- une classe Joueur
- une classe MockDonnees : où l'on définit un ArrayList listeJoueurs de type Joueur
- une classe Authentification : où l'on fait appel à une méthode Inscription (qui fonctionne) et une méthode Connexion (faisant appel à une méthode de MockDonnées)

L'ajout d'un joueur dans l'ArrayList s'effectue parfaitement (j'ai pu le vérifier)

Par contre, je galère (et je pense pourtant que c'est simple) pour développer la méthode VerifIdentiteJoueur(login, motpasse).
Elle me retourne toujours false, alors qu'elle devrait retourner vrai

J'ai essayé avec les fonctionnalités :

-  listeJoueurs.containes(monObjetJoueur) avec monObjetJouer = new Joueur(login, mot de passe) et j'obtient toujours flase
- la  méthodeslisteJoueurs.get(i).getPassword(login)).equals("password"))  et j'obtiens toujours false
Je ne sais pas comment faire et c'est important pour moi de trouver la solution. Peut être est-je mal utiliser les fonctionnalités détaillés précédemment. Merci beaucoup de m'aider pour que ma méthode VerifIdentiteJoueur fonctionne

Voici mes classes.

public class Joueur extends UnicastRemoteObject implements JoueurInterface {

    Score monScore = new Score();
    String loginJoueur;
    String monPassword;
        
    public Joueur() throws RemoteException {
        super();
    }
    
    public Joueur(String login, String pass) throws RemoteException {
        loginJoueur = login;
        monPassword = pass;
    }

    public String getPassword(String login){
        return this.monPassword;
    }
}

--------------------------------------------------------------------------------------------------------------------------
public class MockDonnees {
    static ArrayList < Joueur > listeJoueurs = new ArrayList < Joueur >();
    
    public MockDonnees() throws RemoteException {
    }
    
    public static final void AjoutJoueur(String login, String password) throws RemoteException{
        Joueur monJoueur = new Joueur(login, password);
        listeJoueurs.add(monJoueur);
    }
    public static final boolean VerifIdentiteJoueur(String login, String password) throws RemoteException{
        boolean trouve=false;
        /* Solution 1 envisagé mais qui ne fonctionne pas
        Joueur monJoueur = new Joueur(login, password);
        trouve=listeJoueurs.contains(monJoueur);
        */
        
        /* Solution 2 envisagé mais qui ne fonctionne pas
        /*for (int i =0 ; i <=  listeJoueurs.size(); i++)
        {
            if ((listeJoueurs.get(i).getPassword(login)).equals("password")){
                trouve=true;
            }
        }
        */

        return trouve;
        }
--------------------------------------------------------------------------------------------------------------------------------
public class Authentification extends UnicastRemoteObject implements
        AuthentificationInterface {

    public Authentification() throws RemoteException{
    }
    public void Inscription(String login, String password) throws RemoteException {
        MockDonnees.AjoutJoueur(login, password);
    }
    
    public boolean Connexion(String login, String password) throws RemoteException {
        boolean cnnx=MockDonnees.VerifIdentiteJoueur(login, password);
        return cnnx;
    }
        

10 réponses

Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
3 mars 2007 à 22:43
Salut:

public class Joueur {
   String loginJoueur;
   String monPassword;
   // ...
   
   // Surchargé notre méthode equals () pour répondre à nos besoins
   public boolean equals (Object o) {
      if (!(o instanceof Joueur))
         return false;

      Joueur player = (Joueur)o;
   
      if (this.loginJoueur == player.loginJoueur &&
          this.monPassword == player.monPassword)
         return true;
      
      return false; 
   }

}
__________________________________________________________
A.B. :  La lumière voyage plus vite que le son. C'est pourquoi certaines personnes paraissent brillantes jusqu'à ce qu'elles commencent à parler .../FONT>
3
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
3 mars 2007 à 22:37
Salut:

Une petite explication à propos du valeur de retour de la méthode contains qui est toujours false.

Comme tu n'as pas sruchargé la méthode equals de la classe de base Object, ta classe Joueur utilises cette dernière et du fait que la méthode contains utilises implicitement cette méthode elle DOIT retourner false dans notre cas car elle fait un test d'égalité sur les références pas sur l'égalité des champs.

__________________________________________________________
A.B. :  La lumière voyage plus vite que le son. C'est pourquoi certaines personnes paraissent brillantes jusqu'à ce qu'elles commencent à parler .../FONT>
0
Le_Novice Messages postés 3 Date d'inscription vendredi 20 janvier 2006 Statut Membre Dernière intervention 3 mars 2007
3 mars 2007 à 22:55
OK ça semble marcher, merci beaucoup
Et en plus, l'explication est très instructive.
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
3 mars 2007 à 22:59
Merci il faut juster jetter un coup d'oeil sur la documentation elle contient tout ....


__________________________________________________________
A.B. :  La lumière voyage plus vite que le son. C'est pourquoi certaines personnes paraissent brillantes jusqu'à ce qu'elles commencent à parler ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
3 mars 2007 à 23:07
Salut,

je suis absolument contre la réponse de [auteurdetail.aspx?ID=237842 Ombitious_Developper]en java il ne faut JAMAIS faire this.loginJoueur == player.loginJoueur pour comparer 2 chaines de char mais utiliser equals ou compareTo sinon tu risque à 90% d'obtenir tout sauf ce que tu veux.....

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
3 mars 2007 à 23:22
Salut:



C'est juste une faute d'inattention, je n'ai pas fait attention au type des attributs c'est tout.



Le plus important est que l'idée est exprimée.




__________________________________________________________
A.B. :  La lumière voyage plus vite que le son. C'est pourquoi certainespersonnes paraissent brillantes jusqu'à ce qu'elles commencent à parler ...
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
3 mars 2007 à 23:24
Hey, n'oublies pas c'est toi qui dis toujours "la faute est humaine"
__________________________________________________________
A.B. :  La lumière voyage plus vite que le son. C'est pourquoi certainespersonnes paraissent brillantes jusqu'à ce qu'elles commencent à parler ...
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
3 mars 2007 à 23:52
Salut,

bref j'ai dis ce que j'avais à dire.

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
4 mars 2007 à 00:17
Salut:

Tu as parfaitement raison on ne pourra pas donner des choses fausses aux gens, mais comme on est en cours de route certaines détails nous échappent ...




__________________________________________________________
A.B. :  La lumière voyage plus vite que le son. C'est pourquoi certainespersonnes paraissent brillantes jusqu'à ce qu'elles commencent à parler ...
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
4 mars 2007 à 00:45
Salut,

je te l"accorde

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
Rejoignez-nous