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?
4 Réponses :
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; }
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 == x)
= true (2> x ++)
= false true && false
= false Votre expression sera toujours fausse quelle que soit la valeur de votre x
(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.
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
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.
Ce n'est pas une expression valide en Java.