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

avec Java Discussion :

Encore un probleme de if (==)


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2014
    Messages : 39
    Points : 25
    Points
    25
    Par défaut Encore un probleme de if (==)
    Salut
    J'ai encore un probleme avec if(==)

    voici ma portion de code... j'ai pourtant suivi tout ce que Hizin ma apris.
    Jai 2 EditText, editPassword1 et editPassword2... je veux le comparer pour que les 2 password soit pareille. J'ai meme enlever le inputType="textPassword" en XML.

    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
    66
    67
    68
     
    editPassword1 = (EditText)findViewById(id.editPassword);
    editPassword1.addTextChangedListener(new TextWatcher(){
     
        @Override
        public void afterTextChanged(Editable s) {
            checkPass1 = String.valueOf(editPassword1.getText());
            checkPass2 = String.valueOf(editPassword2.getText());
     
            if (checkPass1 == checkPass2) {
                textPasswordInfo.setText(R.string.textPasswordInfo_Ok);
    	    passwordOk = true;
            }
     
            else {
                textPasswordInfo.setText(R.string.textPasswordInfo);
    	    passwordOk = false;
    	    Toast.makeText(getBaseContext(), "pas pareille " + checkPass1 + " " + checkPass2, Toast.LENGTH_SHORT).show();
            }
     
            if (playerNameOk && passwordOk && emailOk){
                buttonNext.setEnabled(true);
            }
     
        }
     
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after){
        }
     
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
        }
    });
     
    editPassword2 = (EditText)findViewById(id.editPassword);
    editPassword2.addTextChangedListener(new TextWatcher(){
     
        @Override
        public void afterTextChanged(Editable s) {
            checkPass1 = String.valueOf(editPassword1.getText());
            checkPass2 = String.valueOf(editPassword2.getText());
     
            if (checkPass1 == checkPass2) {
                textPasswordInfo.setText(R.string.textPasswordInfo_Ok);
    	    passwordOk = true;
            }
     
            else {
                textPasswordInfo.setText(R.string.textPasswordInfo);
    	    passwordOk = false;
    	    Toast.makeText(getBaseContext(), "pas pareille " + checkPass1 + " " + checkPass2, Toast.LENGTH_SHORT).show();
            }
     
            if (playerNameOk && passwordOk && emailOk){
                buttonNext.setEnabled(true);
            }
     
        }
     
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after){
        }
     
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
        }
    });
    Je rentre pourtant a123 dans les deux EditText.
    Pourtant le Toast qui est dans la boucle else de mon if(checkPass1 == checkPass2) me donne comme retour : Pas pareille a123 a123???!!!!

    Pourquoi, qu'est-ce que j'ai pas compris encore, si vous avez besoin de plus de code dites moi le mais je crois que le nécessaire est la.

    J'ai meme essayer dans un nouveau projet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    String test1 = "test";
    String test2 = "test";
     
    if (test1 == test2){
        Toast.makeText(getBaseContext(), "pareille", Toast.LENGTH_SHORT).show();}		
    else {
        Toast.makeText(getBaseContext(), "pas pareille", Toast.LENGTH_SHORT).show();}
    et ca marche, le Toast donne pareille

    Merci encore

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    On ne compare pas les String par == (sauf quand on maîtrise vraiment ce qu'on fait, et encore). Des String, ça se compare par equals() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (editPassword1.getText().equals(editPassword2.getText()) ){
    Parce que == compare les références contenues dans les variables, et que 2 String différentes ont 2 références différentes.

    Dans ton 2ième test, ça fonctionne parce que tu initialises les String avec des constantes. Il y a un "système" dans java qui fait que 2 chaines de même valeur ne sont stockée qu'une fois en mémoire, pour optimiser l'occupation. Quand tu utilises des constantes, tu es sûr que tes variables utilises ces valeurs "partagées". Dans le cas contraire, il est plus difficile de le savoir, surtout quand le code qui génère ces String n'est pas de toi, mais d'une lib.
    Si en plus tu fais un String s2 = new String( s1 ) , tu peux être sûr que ce ne sera plus la même instance, même si c'est la même valeur, et les 2 String s1 et s2 seront de référence différentes.

    En résumé, comme tu ne peux jamais être sûr que 2 String de même valeur sont la même instance de classe String, pour tester si elles sont égales, utilises toujours equals().
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2014
    Messages : 39
    Points : 25
    Points
    25
    Par défaut
    merci j'essaie à l'instant

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2014
    Messages : 39
    Points : 25
    Points
    25
    Par défaut
    merci joel.. donc si je comprend bien chaque fois que je veux comparer 2 string je devrais utiliser cette methode...

    En tout cas Résolu por moi

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par JackDannyL Voir le message
    merci joel.. donc si je comprend bien chaque fois que je veux comparer 2 string je devrais utiliser cette methode...
    Oui.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Des String et n'importe quel objet, en fait. String, Integer, Long, Date, List, même combat. equals() et pas == sauf exception dont on comprend parfaitement la raison.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. [MySQL] encore un probleme php mysql
    Par ph_anrys dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 02/03/2006, 16h14
  2. Et oui encore un probleme d'icone dans une Jframe
    Par frett dans le forum Agents de placement/Fenêtres
    Réponses: 7
    Dernier message: 17/02/2006, 15h12
  3. Encore un probleme
    Par lord jere dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 30/01/2006, 16h40
  4. Encors un problem avec IE
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 24/10/2005, 16h55
  5. Réponses: 7
    Dernier message: 16/07/2004, 13h24

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