Java:计算后缀表达式
这是一个理论问题: 我必须计算一个已经从中缀转换为后缀的表达式。后缀保存在Java:计算后缀表达式,java,stack,postfix-notation,Java,Stack,Postfix Notation,这是一个理论问题: 我必须计算一个已经从中缀转换为后缀的表达式。后缀保存在队列中,因为我想避免使用字符串。这样我就知道了数字之间的划分在哪里,我可以按“正确”的顺序访问它 看起来是这样的: // Original expression: 2+(3+1)-(5-3)^2*3-1 Queue: [2.0, 3.0, 1.0, +, +, 5.0, 3.0, -, 2.0, ^, 3.0, *, -,1.0, -] 现在我想使用两个堆栈: 原始堆栈(事先已填充队列内容) 和目标堆栈 将后缀表达式
队列中
,因为我想避免使用字符串
。这样我就知道了数字之间的划分在哪里,我可以按“正确”的顺序访问它
看起来是这样的:
// Original expression: 2+(3+1)-(5-3)^2*3-1
Queue: [2.0, 3.0, 1.0, +, +, 5.0, 3.0, -, 2.0, ^, 3.0, *, -,1.0, -]
现在我想使用两个堆栈:
- 原始堆栈(事先已填充队列内容)
- 和目标堆栈
- 这是一个好方法,还是应该尝试检测类型为
的所有模式并一次性处理它们NumberNumberOperator
- 如果第二种选择是可行的,那怎么做呢
当一个数字出列时,按下它:当一个运算符出列时,弹出两个值,用这两个操作数计算运算符,然后按下结果。当您到达输入的末尾时,堆栈中应该只有一个值,即结果。否则输入的格式就不正确。听起来很复杂。为什么不只是一堆数字呢。如果您从队列中读取了一个数字,请将其推到堆栈上。如果读取一个运算符,将其操作数从堆栈中弹出,执行该操作,然后将结果返回。如果操作数不存在,则抛出异常。通过阅读维基百科,我明白了。删除了我的评论。