IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

condition ternaire que j'ai du mal à comprendre.


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2013
    Messages : 17
    Points : 19
    Points
    19
    Par défaut condition ternaire que j'ai du mal à comprendre.
    Bonjour,

    Je ne comprends pas pourquoi le code suivant m'affiche la valeur 7. Comment peut-on évaluer la condition (a = x) à true alors que x est une variable de type booléen et a est une variable de type int.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class Test {
     
    	public static void main(String[] args) {
     
    		boolean x = true;
    		int a;
     
    		if(x) a = x ? 7 : 14;
     
    		else a = x ? 3 : 4;
    		System.out.println(a);
     
    	}
    Le code affiche 7.
    Quelqu'un pourrait m'expliquer pourquoi a = x est considérée comme vrai. (condition ternaire).

    Merci d'avance de votre aide.

    Batman90

  2. #2
    Membre confirmé
    Avatar de Glob
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Avril 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Avril 2002
    Messages : 428
    Points : 630
    Points
    630
    Par défaut
    Hello,

    je pense que si tu mets systématiquement des crochets { } autour de tes blocs de code ça pourra t'aider à comprendre ;-)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    boolean x = true;
    int a;
     
    if (x) {
      a = x ? 7 : 14;
    }
    else {
      a = x ? 3 : 4;
    }
    Au final on se rend compte qu'il n'y a pas de "condition" a=x, mais une assignation à 7 si x est évalué à true.

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Non seulement = est l'opérateur d'affectation et non d'identité puisque c'est ==, mais en plus il n'est pas question de tester si un int est identique à un boolean, l'opérateur == en le permettant pas en Java.

    Une expression ternaire du type a = b?c:d correspond à écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if ( b ) {
        a=c;
    }
    else {
        a=d;
    }
    Ecrire if ( x ) machin = x?valeur1:valeur2 est une répétition inutile du test de x. Si on évalue l'expression ternaire, c'est que x est true, et donc c'est forcément la première valeur qui est affectée, celle qui correspond à x==true. Autant écrire directement if (x) machin=valeur1; .

    Au final, ton code peut se simplifier à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (x) {
      a = 7;
    }
    else {
      a = 4;
    }
    ou

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Que fais-je de mal ?
    Par ermite67 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 05/10/2007, 10h33
  2. Une erreur que j'arrive pas a comprendre
    Par olifile dans le forum Windows Forms
    Réponses: 2
    Dernier message: 03/05/2007, 13h41
  3. [PEAR :: Auth ] j'ai du mal à comprendre
    Par draho dans le forum Langage
    Réponses: 2
    Dernier message: 18/07/2006, 12h30
  4. [Caml] Du mal à comprendre comment cela fonctionne...
    Par Sir Caedes dans le forum Caml
    Réponses: 16
    Dernier message: 05/01/2006, 11h52
  5. du mal à comprendre la fonction strtok
    Par thierry_b dans le forum C
    Réponses: 2
    Dernier message: 25/11/2005, 10h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo