2013-12-11 2 views
0

, если у меня есть следующая логика для проверки истинны или оба ложны, но игнорировать другие, я пишу:проверки истинны или оба ложны

if (a) { 
    if (b) { 
    // do something when both true 
    } 
} else if (!b) { 
    // do something when both false 
} 

является то, что самый простой, вы можете написать в Java?

, конечно, я могу написать

if (a && b) { 
    // do something when both true 
} else if (!a && !b) { 
    // do something when both false 
} 

, но я имею в виду, если это возможно, чтобы достичь этого, используя только один, если условие и еще без условий, например,

if (some condition) { 
    // do something when both true 
} else { // <-- check! only else, no more condition 
    // do something when both false 
} 

Невозможно, конечно, приемлемый ответ на этот вопрос (если сопровождается объяснением)

Спасибо вам

ответ

4

Извинения для моего первоначального XOR ответа - я неправильно понял ваш вопрос. Правильный ответ:

Невозможно на Java.

Причина в логической логике. Если у вас есть две логические выражения, А и В, то есть четыре возможных состояния:

A B 
0 0 << A and B are false 
0 1 
1 0 
1 1 << A and B are true 

Если у вас есть условие, которое говорит: «А и В истинны», у вас есть только последнее состояние. К сожалению, «else» (все остальные) содержит три возможных состояния. Вы не можете иметь что-то истинное для одного состояния, ложное для другого и «что-то другое» для двух других. Это не так, как работает булева алгебра.

+0

Нет, мне нужно как истинен, а затем оба ЛОЖЬ – user1589188

+0

+1 После обновления объясните, почему он «не работает». – user2864740

+0

Итак, независимо от того, насколько сложным является первое условие, которое я могу написать, нет способа отфильтровывать остальные простым? – user1589188

2

Ответ нет. Вы не можете иметь предложение else, которое работает только при определенных условиях без использования else if. Предложение else без else if будет выполняться каждый раз, когда условие в предложении if является ложным. Если вы хотите добавить дополнительные ограничения (например, как a, так и b), вам необходимо использовать else if.

Там нет ничего плохого в использовании else if, хотя, и это делает Ваше намерение довольно ясное:

if (a && b) { 

} else if (!a && !b) { 

} 
+0

+1 Для объяснения. Я думаю, что это самый простой/понятный способ. Я бы использовал его * или * вариант: 'if (a && b) {..} else if (! (A || b)) {..}', в зависимости от того, что я считал более понятным для данного случай .. но это также то же самое, что указано в исходном сообщении. – user2864740

1

У вас есть три состояния вы хотите обрабатывать по-разному - хоть один случай, чтобы «ничего не делать.»

if (a && b) 
{ 
    // Do something when both are true. 
} 
else if (! a && ! b) 
{ 
    // Do something if both are false. 
} 

Это самый экономичный способ сделать то, что вы хотите достичь - два теста для трех случаев.

В качестве альтернативы, если вы можете вернуть 0 или 1 из ваших «логических значений» или выражений, вы могли бы сделать что-то вроде:

switch (a + b) 
{ 
    case 0: 
     // Do something when both a and b are "false." 
     break; 

    case 1: 
     // Do something -- or nothing -- when a or b are "false" and the other is "true." 
     break; 

    case 2: 
     // Do something when both a and b are "true." 
     break; 
} 
Смежные вопросы