Aller au contenu

[Résolu] condition : if pour les string


kaeell

Recommended Posts

Posté(e)

bonjour

j'ai un petit probleme avec une condition et je n'arrive pas à comprendre ou est mon erreur, bon je debute en programmation, le soucis vient peut-etre de là.

la condition, n 'est jamais rempli pourtant dans une autre partie du code je verifie avec un log.i la valeur de type et elle correspond bien

y a t'il un manque quelque part ?

le if n'est il pas le bon choix, j'ai essaye un switch sur les conseils d'un pote mais ca ne prend pas en compte les strings.

j'ai teste les conditions opposées elles fonctionnent

et si je mais un else ca passe aussi

merci

        String type = livreCursor.getString(livreCursor.getColumnIndex(DBAdapterlivre.KEY_TYPE));
           TextView typeview = (TextView) view.findViewById(R.id.type);
           typeview.setText(type);


if ("film"==type) {

       typeview.setBackgroundResource(R.color.bleu);    
       }

if (type=="livre") {
               typeview.setBackgroundResource(R.color.rouge);

           }

if (type=="CD") {
           typeview.setBackgroundResource(R.color.vert);

       }

Posté(e)

déjà pour le premier if, tu dois mettre type=="film" et non l'inverse.

En debuggant, met un breakpoint au niveau du premier if et dit nous quelle valeur tu vois dans type.

Posté(e)

pour le if c'etait un test vu dans l'autre sens ca ne marchait pas je me suis dit que le sens inverse fonctionnait peut etre

pour le debug

j'ai type = "livre" (id=830060678584)

Posté(e)

J'ai contourné mon probleme en changeant le type en int et les valeurs associées et la ca fonctionne.

mais j'aimerais comprendre donc si quelqu'un a une explication je veux bien.

merci

Posté(e)

j'ai tape ce code mais le probleme reste

        if (type.trim()== "film") {

               typeview.setBackgroundResource(R.color.bleu);

           }

la variable type provient d'une bd et je la fixe a la création des données dans une autre classe

comme ceci

String type = "livre";

pour voir si j'ai bien compris trim sert à supprimer tous les espaces avec et après la chaine de caractères ou juste un

Posté(e)

Hello,

Ton code ne peut pas fonctionner : tu ne compares pas correctement tes Strings.

En java il faut faire :

type.trim().equals("film") ou "film".equals(type.trim()) (mieux) ou encore "film".equalsIgnoreCase(type.trim())

Si tu fais chaine1 == chaine2, tu compares les références des strings et pas leur contenu.

Erreur classique de débutant en java :)

je t'invite à consulter la javadoc de java.lang.String : http://download.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#equals(java.lang.Object)

Posté(e)

ma première réponse était equals également, mais je ne sais pas pourquoi, j'ai édité pour mettre une connerie ^^. Decidemment, vais me coucher tôt ce soir :p

On peut ajouter pour l'explication que ça s'explique par le fait que String n'est pas de type primitive (comme int, long, boolean), mais de type objet (le S majuscule de String en témoigne, sinon ce serait string). De ce fait, String a ses propres méthodes.

Voilà, me suis ressaisi :).

Posté(e)
ma première réponse était equals également, mais je ne sais pas pourquoi, j'ai édité pour mettre une connerie ^^. Decidemment, vais me coucher tôt ce soir :p

Je suis aussi un boulet :|

je me suis basé sur ton exemple pour répondre, effectivement le trim() n'est pas forcément utile.

tout le monde au dodo :lol:

Posté(e)

Juste une petite remarque en passant, un test avec un "if inversé"

if (8 == blop)

est tout à fait correct. C'est même une pratique assez courante en C par exemple qui contrairement à Java laisse faire certaines erreurs (affectation de variable malencontreuse) en n'émettant qu'un simple warning...

Par exemple ce code en C compilera parfaitement, il y aura juste un warning (j'utilise volontairement une variable de type entier) :

int blop = 8;

if (blop == 8)
{
   // Si blop vaut 8.
}

if (8 == blop)
{
   // Si blop vaut 8.
}

if (blop = 9)
{
   // Lève un simple warning.
   // blop prend la valeur 9 !
}

if (9 = blop)
{
   // Lève une erreur à la compilation.
   // Permet d'éviter une affectation malencontreuse !
}

Par contre en Java c'est moins utile, le compilateur lève une erreur sur

if (blop = 9)

...

++

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...