Comment enchaîner les instructions conditionnelles dans Java d'une manière telle que si b
est faux, alors ne cochez pas c
?
Si a
et c
sont faux, et b
est vrai, c
sera-t-il vérifié?
if (a || b || c)
Je recherche une fonctionnalité similaire qui PHP est valable avec une différence entre OR
et ||
Le Java ||
L'opérateur (logique ou opérateur) n'évalue pas les arguments supplémentaires si l'opérande de gauche est true
. Si vous le souhaitez, vous pouvez utiliser |
(au niveau du bit ou opérateur), bien que, selon le nom, ce soit un peu un hack.
http://docs.Oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.2
Ainsi, && calcule le même résultat que & sur les opérandes booléens. Elle ne diffère que par le fait que l'expression d'opérande de droite est évaluée de manière conditionnelle plutôt que toujours.
http://docs.Oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.24
Ainsi, || calcule le même résultat que | sur les opérandes booléens ou booléens. Elle ne diffère que par le fait que l'expression d'opérande de droite est évaluée de manière conditionnelle plutôt que toujours.
Extra: il est considéré comme un mauvais style de programmation de dépendre de cette sémantique pour appeler conditionnellement du code avec des effets secondaires.
c
ne sera pas vérifié. Pour le prouver, vous pouvez utiliser le code suivant:
boolean a() {
System.out.println("a")
return false;
}
boolean b() {
System.out.println("b")
return true;
}
boolean c() {
System.out.println("c")
return true;
}
void test() {
if(a() || b() || c()) {
System.out.println("done")
}
}
La sortie sera:
a
b
done
si (a || b || c)
pour votre cas,
a est vrai alors b et c non vérifiés.
a est faux et b est vrai alors c n'est pas vérifié.
a et b sont faux alors c est vérifié.
le côté gauche de l'opérateur est évalué en premier
Si a
est faux et b
est vrai, alors c
ne sera pas évalué.
Voir ceci réponse qui résout le court-circuit des opérateurs logiques en Java.
1) Comment chaîner des instructions conditionnelles en Java de manière à ce que si b est faux, alors ne cochez pas c ?
c
alors est immatérielif (a || b)
if (a || (b && c))
2) Si a et c sont faux et b est vrai, c sera-t-il vérifié? [si (a || b || c)]
||
effectue une évaluation des courts-circuits. Ainsi, si a
est false
, b
sera vérifié et si b
est vrai, c
ne sera pas vérifiéPour en savoir plus sur l'évaluation des courts-circuits: voir