kaeell Posté(e) 20 août 2010 Share Posté(e) 20 août 2010 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 More sharing options...
chikenkilr Posté(e) 20 août 2010 Share Posté(e) 20 août 2010 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
kaeell Posté(e) 20 août 2010 Auteur Share Posté(e) 20 août 2010 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) Lien vers le commentaire Partager sur d’autres sites More sharing options...
kaeell Posté(e) 20 août 2010 Auteur Share Posté(e) 20 août 2010 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
akex Posté(e) 20 août 2010 Share Posté(e) 20 août 2010 if (type.trim() == "livre")) sera un peu mieux. Pense au trim également, on sait jamais, s'il y a des espaces après. Lien vers le commentaire Partager sur d’autres sites More sharing options...
kaeell Posté(e) 20 août 2010 Auteur Share Posté(e) 20 août 2010 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 More sharing options...
manant78 Posté(e) 20 août 2010 Share Posté(e) 20 août 2010 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 More sharing options...
akex Posté(e) 20 août 2010 Share Posté(e) 20 août 2010 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 More sharing options...
manant78 Posté(e) 20 août 2010 Share Posté(e) 20 août 2010 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 More sharing options...
akex Posté(e) 20 août 2010 Share Posté(e) 20 août 2010 Ce n'est pas du luxe le trim. Vaut mieux ceinture et bretelle que airbag seul ... (cherchez pas, jdm de m****) Lien vers le commentaire Partager sur d’autres sites More sharing options...
kaeell Posté(e) 21 août 2010 Auteur Share Posté(e) 21 août 2010 c'est parfait merci beaucoup Lien vers le commentaire Partager sur d’autres sites More sharing options...
SesechXP Posté(e) 22 août 2010 Share Posté(e) 22 août 2010 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 More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.