[JAVA] condition

Résolu
Bonjour,

J'essaie de réaliser une condition de la forme

(condition) ? instruction si vrai : instruction si faux


Si je fais
if ( horaires[0]!= null )
		{
			this.lun1=horaires[0];
		}else
		{
			this.lun1="";
		}

ça marche.

Si je fais
(horaires[0]!= null) ? this.lun1=horaires[0] : this.lun1="";
, ça ne marche pas et eclipse me donne comme message d'erreur "The left-hand side of an assignment must be a variable".

(horaires étant une String[] obtenue en splittant une String)

Je ne comprends pas pourquoi j'ai ce message, et je ne vois pas quel assignment est en cause ?

Merci
Configuration: Windows XP
Firefox 3.0.1

7 réponses

  1. Contributeur
    Salut,
    Essaie plutôt :
    this.lun1=(horaires[0]!= null) ? horaires[0] : "";

    Cdt
    1. Merci Fiddy, je n'avais pas dû bien comprendre la syntaxe. Pourtant j'ai cherché des exemples, mais je n'en ai pas trouvé...

      Il n'y a plus d'erreurs maintenant, mais il ne fait pas encore ce que je voulais : afficher une chaîne vide à la place de "null". Je cherche...
      1. Bon, ça ne marche pas, mais ça vient peut-être de tapestry. Il affiche toujours "null" à la place de ""... Je vais chercher une autre solution.

        Merci fiddy pour ta réponse, je mets "résolu" car le problème de la condition est bien résolu.
        1. Contributeur
          C'est normal. Tu as fait une erreur classique.
          Explication :
          this.lun1=(horaires[0]!= "null") ? horaires[0] : ""; 

          horaires[0]!="null" va comparer les instances de String. Ils ont des instances différentes. Donc cette instruction est vraie (même si horaires[0]="null"). Du coup this.lun1 va récupérer horaires[0] qui vaut null dans ton cas.

          En java, pour comparer deux String, on utilise la méthode equals.
          Par exemple :
          this.lun1=(! horaires[0].equals("null")) ? horaires[0] : "";
          

          Cdt
          1. Contributeur
            En fait, l'opérateur ternaire marche comme suit :
            condition?valeur1:valeur2;

            Si la condition est vraie, alors ça renvoie valeur1 sinon valeur2. C'est pour ça qu'il faut mettre de la forme :
            a=1<3?1:0;


            Il n'y a plus d'erreurs maintenant, mais il ne fait pas encore ce que je voulais : afficher une chaîne vide à la place de "null". Je cherche...
            Comment ça ?
            1. Donc si j'ai bien compris, après l'instruction
              a=1<3?1:0;
              a vaut 1 si 1<3 et 0 sinon.

              En fait, ça ne marche pas... J'ai mis, comme tu m'as conseillé,
               this.lun1=(horaires[0]!= null) ? horaires[0] : "";
              


              Le but est que quand la chaîne horaires[0] est null, this.lun1 prenne la valeur "" et non pas null. Mais si j'affiche this.lun1, j'obtiens toujours null. J'ai fait divers essais :
              this.lun1=(horaires[0]!= null) ? horaires[0] : "";
              this.lun1=(horaires[0]!= null) ? horaires[0] : "1";
              this.lun1=(horaires[0]!= "null") ? horaires[0] : ""; // au cas où je n'aurais pas une chaîne null mais une chaîne de valeur "null"
              this.lun1=(horaires[0]!= "null") ? horaires[0] : "1";
              


              La deuxième ligne m'a permis de voir que this.lun1 ne prenait pas la valeur donnée après ":"
              1. Merci beaucoup Fiddy, tes explications sont très claires ! Pourtant, ça ne doit pas être la première fois que je compare des String...