Aller au contenu

[Résolu] condition : if pour les string


kaeell

Recommended Posts

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);

       }

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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)

Lien vers le commentaire
Partager sur d’autres sites

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 :).

Lien vers le commentaire
Partager sur d’autres sites

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:

Lien vers le commentaire
Partager sur d’autres sites

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)

...

++

Lien vers le commentaire
Partager sur d’autres sites

Archivé

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

×
×
  • Créer...