kaeell Posted August 20, 2010 Share Posted August 20, 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); } Link to comment Share on other sites More sharing options...
chikenkilr Posted August 20, 2010 Share Posted August 20, 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. Link to comment Share on other sites More sharing options...
kaeell Posted August 20, 2010 Author Share Posted August 20, 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) Link to comment Share on other sites More sharing options...
kaeell Posted August 20, 2010 Author Share Posted August 20, 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 Link to comment Share on other sites More sharing options...
akex Posted August 20, 2010 Share Posted August 20, 2010 if (type.trim() == "livre")) sera un peu mieux. Pense au trim également, on sait jamais, s'il y a des espaces après. Link to comment Share on other sites More sharing options...
kaeell Posted August 20, 2010 Author Share Posted August 20, 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 Link to comment Share on other sites More sharing options...
manant78 Posted August 20, 2010 Share Posted August 20, 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) Link to comment Share on other sites More sharing options...
akex Posted August 20, 2010 Share Posted August 20, 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 :). Link to comment Share on other sites More sharing options...
manant78 Posted August 20, 2010 Share Posted August 20, 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: Link to comment Share on other sites More sharing options...
akex Posted August 20, 2010 Share Posted August 20, 2010 Ce n'est pas du luxe le trim. Vaut mieux ceinture et bretelle que airbag seul ... (cherchez pas, jdm de m****) Link to comment Share on other sites More sharing options...
kaeell Posted August 21, 2010 Author Share Posted August 21, 2010 c'est parfait merci beaucoup Link to comment Share on other sites More sharing options...
SesechXP Posted August 22, 2010 Share Posted August 22, 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) ... ++ Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.