2
votes

Lire et interpréter une expression logique dans un programme

Comment lisez-vous habituellement les expressions logiques dans un programme? Par exemple:

(1 == x) && (2> x ++)? (x = 1)

À quoi sert ? et quelle est la façon de penser pour générer la bonne réponse pour l'expression?


1 commentaires

Ce n'est pas une expression valide en Java.


4 Réponses :


1
votes

L'instruction suivante:

x = (1 == x) && (2 > x++) ? 1 : some other value

Est une instruction conditionnelle spéciale qui utilise un Opérateur ternaire (?: ) pour attribuer des valeurs, basées sur l'expression booléenne, à la variable.

C'est beaucoup plus manière concise d'exprimer cette instruction conditionnelle:

if ((1 == x) && (2 > x++)){
    x = 1;
}
else {
    /*This is the value that would be put after the colon
     *(which is missing in your example, and would cause a compiler error)
     */
    x = some other value; 
}

Donc, sur la base de votre exemple (syntaxiquement incorrect btw), ce serait quelque chose comme:

var value;

//this is the boolean expression you evaluate before the question mark
if (boolean expression is true) {
    //this is what you assign after the question mark
    value = some value if true;
}
else {
    //this is what you assign after the colon
    value = some other value if false;
}


0 commentaires

1
votes

Cette instruction ne se compile même pas, ? est utilisé avec : comme opérateur ternaire.

Après (x = 1) , vous devriez avoir la branche else, juste un exemple:

(1 == x) && (2> x ++)? (x = 1): (x = 2)

La façon dont cette expression booléenne est évaluée est la suivante, supposons que x soit 1:

  1. (1 == x) = true
  2. (2> x ++) = false
  3. true && false = false

Votre expression sera toujours fausse quelle que soit la valeur de votre x


0 commentaires

1
votes
 (1 == x) && ( 2 > x++)? (x=1);
? stands for ternary operation. , if left of ? is true then it follows immediate right side.In your case if ( 2 > x++) is true then value of x will be 1. but to travel towards ( 2 > x++) your left expression have to be true which means x==1, so if 
(1 == x) is true and so( 2 > x++) is true then your overall condition to true.

2 commentaires

Hein? x ++ signifie que l'incrémentation se produira après évaluation de x. Donc 2> x ++ est 2> 1 est vrai.


@ErwinSmout, vous avez raison, je l'ai manqué. Merci mec +1



1
votes

En plus des commentaires pertinents sur?: où le deux-points est requis , ce qui suit est également nécessaire pour "comprendre" le fonctionnement du code dans l'exemple: < / p>

L'ordre d'évaluation de && implique que ´ (2> x ++) ´ ne sera pas évalué à tous sauf si ´ (1 == x) ´ est vrai. Cela signifie en particulier que l'effet secondaire de x ++ ne se produira pas.

´x = 1´ est une attribution donc à première vue, cela ne ressemble pas à une expression qui évalue une valeur, mais en java les attributions sont elles-mêmes des expressions qui prennent la valeur attribuée.


0 commentaires