Подтвердить что ты не робот

Есть ли способ заставить java проверить два условия независимо от первого условия?

скажем, у меня есть утверждение

if(stack.pop() == 1 && stack.pop() == 1)

Если вершина стека равна 0, то второе условие не будет реализовано, что означает, что оно просто выдает одно значение вверху. То, что я хочу, - это поп-аз, верх и значение после вершины. Есть ли способ сделать это без использования в нем другого оператора if-else?

4b9b3361

Ответ 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
    }
}