J'ai une instruction conditionnelle if comme celle-ci

if ((a && (b || c)) ||
     (b && (a || c))) {
}

En gros, ce que j'essaie de réaliser, c'est que je ne peux avoir qu'une seule option vraie, mais deux n'est pas ok!

Peut-il être plus simplifié, me semble redondant! Ou devrais-je l'extraire dans une fonction?

modifier

if (a && !b && !c) // process a
if (b && !a && !c) // process b
if (c && !a && !b) // process c
if (!a && !b && c!) // none present exception
else {} // more than one case exception
0
JonB 19 nov. 2018 à 16:49

4 réponses

Meilleure réponse

Suite au commentaire et à l'édition, chaque ligne est le développement de la précédente:

(a && (b || c)) || (b && (a || c))
((a && b) || (a && c)) || ((a && b) || (b && c))
(a && b) || (a && c) || (a && b) || (b && c)

Vous avez un doublon, vous pouvez donc le transformer en: (ces lignes sont égales)

(a && b) || (a && c) || (b && c)
(a && (b ||c)) || (b&&c)
2
jhamon 19 nov. 2018 à 15:15

Oui, cela peut être plus simple, ce serait plus que suffisant puisque a && b donnera le même résultat que b && a:

if (a && b || c) {

}

Remarque: la question d'origine était complètement différente et demandait de simplifier l'expression suivante:

if ((a && b || c) ||
     (b && a || c)) {
}
5
Mark 19 nov. 2018 à 15:32
&& operator is Commutative so a && b or b && a results in same output.

Now your condition becomes like this
if ((a && b || c) ||
     (a && b || c)) {
}

|| operator is Idempotent so x || x results x

your expression becomes (a && b) || c

But in java && and || operators exhibit "short-circuiting" behavior

First operand will be evaluated first and then second operand will be evaluated only if need so you can choose which operand to keep first based on operand complexity.
1
Rambabu.Botcha 19 nov. 2018 à 14:21
if (c || (a && b) {
...
}

Les 2 grandes conditions sont les mêmes ... ´ && `est commutatif

0
JoSSte 19 nov. 2018 à 14:22