Есть ли способ заставить java проверить два условия независимо от первого условия?
скажем, у меня есть утверждение
if(stack.pop() == 1 && stack.pop() == 1)
Если вершина стека равна 0, то второе условие не будет реализовано, что означает, что оно просто выдает одно значение вверху. То, что я хочу, - это поп-аз, верх и значение после вершины. Есть ли способ сделать это без использования в нем другого оператора if-else?
Ответы
Ответ 1
Используйте bitwise AND operator
**:
if( stack.pop() == 1 & stack.pop() == 1 )
Это приведет к оценке обеих сторон.
** Я знаю это с помощью "короткого замыкания" логического И, но он действительно является побитовым оператором, который действует на булевых операндах (документация здесь).
Обновление: Как пояснил JBNizet в своем комментарии ниже, этот код является "хрупким", так как некоторые разработчики могут "исправить" оператора до версии короткого замыкания. Если вы решите использовать &
вместо сохранения значений вызовов метода (заставляя их запускать) аналогично ответ JBNizet, вы должны написать комментарий перед вашим оператором if.
Ответ 2
int first = stack.pop();
int second = stack.pop();
if (first == 1 && second == 1)
Ответ 3
Еще один однострочный и слегка запутанный способ сделать это:
if( stack.pop() == 1 ? stack.pop() == 1 : stack.pop() == 1 && false )
Лично я бы пошел на путь JB Nizet. Делает это так ясно, как может быть именно то, что вы пытаетесь сделать.
Ответ 4
проще всего, я нашел (если стек содержит только 0 и 1):
if(stack.pop() + stack.pop() == 2)
или JB с одной переменной:
int first = stack.pop();
if (stack.pop() == 1 && first == 1)
Ответ 5
Вот подход, который будет обходить исключение EmptyStackException, когда стек имеет менее двух элементов.
if (stack.size() > 0) {
int first = stack.pop();
if (stack.size() > 0) {
if (first == 1 && stack.pop() == 1) ; //do something here
}
}