Violetttte 2021-12-05 14:20 采纳率: 82.8%
浏览 11
已结题

中缀表达式转后缀表达式时,原中缀表达式的形式如果是(a+b*c)那么结果不对怎么办

在中缀表达式转后缀表达式的学习过程中,我发现如果一个字符串是(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条回答 默认 最新

  • 未聞花名丶 2021-12-05 15:39
    关注

    可以判一下符号的优先级,
    1.比如现在stack里面放了+ - 号,然后遍历到 * / 时候,那么就压stack,最后 * / 先出
    2.如果是 + - ,遍历到 + - ,那么和栈顶优先级一样,栈顶先出,然后再压stack

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月30日
  • 已采纳回答 5月22日
  • 创建了问题 12月5日

悬赏问题

  • ¥15 isolar-AB软件安装后打开出错
  • ¥15 如何让usb软件在电脑拔插无记录
  • ¥15 ecology9的待办推送外部系统
  • ¥15 Mplus跑出来的数据只有原数据的一半
  • ¥15 vue项目添加全局处理解决一些开发问题
  • ¥40 微信小程序前后端交互
  • ¥50 数据预处理(大量数据)
  • ¥15 多设备数据融合可视化显示控制
  • ¥15 公众号关键词自动回复超链接
  • ¥18 help me! 希望大家来看看 吉~