在中缀表达式转后缀表达式的学习过程中,我发现如果一个字符串是(a+bc)的形式,那么最后得出的结果会是(a+b)c,这该怎么办呢?,例如"1+(2+34)-5"这个表达式,最后运算出来是21,程序先把括号内的+添加进栈了,没有考虑到后面的乘号,显然结果和"1+(43+2)-5"是不同的,要想达到效果还得给34加一对括号,变成1+(2+(34))-5 这怎么办呢?
我对比了书上和看的视频上的代码 下面的代码应该是没问题的 但是却不能对特定的字符串进行计算 怎么办?
我的原码如下:
```java
public static List<String> toPostfixList(List<String> list){
Stack<String> stack = new Stack<String>();
List<String> stack2 = new ArrayList<String>();
for(String item:list)
{
if(item.matches("\\d+")) {
stack2.add(item);
}else if(item.equals("("))
stack.push(item);
else if(item.equals(")"))
{
while(!stack.empty()&&!stack.peek().equals("(")) {
stack2.add(stack.pop()); /
}
stack.pop();
} else
{
while(stack.size()!=0 && Operation.getPriority(stack.peek()) >= Operation.getPriority(item))
stack2.add(stack.pop());
stack.push(item);
}
}
while(stack.size()!=0)
stack2.add(stack.pop());
return stack2;
}
```
可以判一下符号的优先级,
1.比如现在stack里面放了+ - 号,然后遍历到 * / 时候,那么就压stack,最后 * / 先出
2.如果是 + - ,遍历到 + - ,那么和栈顶优先级一样,栈顶先出,然后再压stack