2015-10-21 3 views
0

Im пытается сделать, если заявление, как это:Если оператор, который использует 3 булевы значения

if(boolean1 AND boolean2 AND boolean3 == true){ 
    [Do this....] 
} 

есть способ сделать, если заявление в этом формате или будет я должен сделать это следующим образом:

if(boolean1 = true & boolean2 = true ect...){} 
+1

Кстати: если вы находитесь в булевом контексте, вам никогда не нужно сравнивать его с '== true' и, вероятно, никогда не должно (это просто шум). Поэтому не делайте 'if (a && b && c == true)', просто делайте 'if (a && b && c)'. – yshavit

+0

Также обратите внимание, что сингл & выполняет побитовое, а не логическое. Использование &, когда вы действительно имеете в виду &&, может варьироваться от небольшого удара производительности до катастрофы, в зависимости от экземпляра. –

+0

не рекомендовал бы его, но 'if (Stream.of (boolean1, boolean2, boolean3) .allMatch (Boolean.TRUE :: equals))' имеет семантику, близкую к тому, что вы хотите. – zapl

ответ

2

Наименее вы можете получить

if(boolean1 && boolean2 && boolean3 &&..){ 

} 

Потому что, так как они уже BOOLEANS вам не нужно, чтобы проверить их ценность. Афайк, нет другого простого способа.

Если у вас есть toooooooo много, создать массив и написать простой метод Util, чтобы проверить, все ли это false

2

Да, но вам нужны два & (ы) для логических и (один побитовый и). Кроме того, одно равенство присваивается (вам нужно два или ни одного). Нечто подобное,

if (boolean1 && boolean2 && boolean3){ 
    // ... 
} 
+3

На самом деле вы не _need_ двойной '& '(побитовое И отлично работает). Хотя иногда они более эффективны. –

+0

Это говорит о том, что '&&' гораздо чаще встречается, поэтому, если одноранговый узел встречается с одним-'и', они, вероятно, предполагают, что это опечатка и исправить его для вас. Если по какой-то причине вам действительно нужен одиночный '' ', то, вероятно, стоит добавить комментарий в код. – yshavit

+1

Они не совпадают: сингл & будет проверять оба условия всегда, double && остановится после первого условия, если он будет считать false. –

0

Там нет необходимости сравнивать с true (хотя иногда это может быть хорошо для удобства чтения):

if (boolean1 && boolean2 && boolean3) {... 
0

Нет синтаксиса, который будет работать в полной мере для проверки трех переменных или утверждений в отношении одного результата. Важно отметить, что и & в качестве логических операторов не соответствуют всем нормальным применениям слова AND (например, вы не смогли проверить, что boolean1 AND boolean2 AND boolean3 == false с операторами && или &).

Тем не менее, оценка boolean1 == true даст тот же результат, что и boolean1. Так утомительно, если заявление

if(boolean1 == true & boolean2 == true & boolean3 == true){...} 

может быть сокращен до

if(boolean1 & boolean2 & boolean3){...} 

Это также, вероятно, целесообразно использовать && вместо &, если у вас нет особых причин, чтобы избежать короткого замыкания. См. Differences in boolean operators: & vs && and | vs || для получения дополнительной информации по этой теме.

Смежные вопросы