无法理解我需要在 Java 中的 while 循环条件下检查什么

Cannot understand what I need to check for in the condition of a while loop in Java

我无法理解我需要在以下 while 循环的条件评估中检查什么,这是算法伪代码的摘录:

 if the token is an operator {
        while(the stack is not empty 
            AND the top of the stack is not a "(" 
            AND the precedence of the token on the top of the stack >= current token) {
                    pop the token on the stack and enqueue it
            } // end while
        push current token onto the stack
        } // end if token is an operator

我的方法是这样的,知道我正在检查运算符(即 + - ^ 等):

while((stack.isEmpty()) == false && (((Comparable<String>)stack.peek()).compareTo( "(") != 0) && ) //Missing a logical && (CHECK ALGORITHM)
    queue.enqueue(stack.pop());
    stack.push(tokenIterator);
}

一些说明:

示例:我编写了一个辅助函数,以一种漂亮的形式打印当前队列内容。如果我输入表达式 (6 + 9) - (9 + 6 + 3) + 2,队列打印:

 ADD->|| 6| 9 | + | 9 | 6 | + | 3 | + | 2 | + | - ||<-RMV

这当然是上述中缀表达式的错误后缀表示法。按照我的说法应该是:6 9 + 9 6 + 3 + - 2 +

你真的不需要知道更多,因为我的问题只是“AND 栈顶标记的优先级 >= 当前标记 “ 意思。我不明白它要我做什么。希望在我的 while 循环中解决这第三个 && (and) 条件将使我的算法输出正确的后缀表示法。


编辑 1:

既然我知道什么是优先级,我认为队列中的 ( 可能在检查优先级方面发挥重要作用,因此,这是相同数学表达式的队列的原始输出作为上面的示例给出(我从上面另一个队列打印中的队列中删除了 ( 因为我认为它们没用):

#######QUEUE#######
======================================================================
ADD->|| 6| 9 | + | 9 | 6 | + | 3 | + | 2 | + | ( | - | ( ||<-RMV
======================================================================

token的优先级是它在计算函数时的优先级。例如:最常用的数学运算符的优先级降序排列:() ^ */% +-.

您提到的条件阻止算法在队列中包含优先级高于当前运算符的任何运算符。

因为当前token必须是运算符所以我想这里的"the precedence"指的是运算符优先级,也就是说乘法和除法优先于加法和减法。这有意义吗?还是您只是加减法?