IIlIlIlilIlIlII 2020-09-02 18:39 采纳率: 0%
浏览 88

有没有大神帮忙改一下 Java中缀表达式求值

 public String callist(List<String> expl){
        while(expl.size()>1){
            if(isnum(expl.get(0))&&isnum(expl.get(2))&&isoper(expl.get(1))){
                BigDecimal num1= new BigDecimal(expl.get(0));
                BigDecimal num2= new BigDecimal(expl.get(2));
                BigDecimal ans=BigDecimal.valueOf(0);
                char oper=expl.get(1).charAt(0);
                switch(oper){
                    case'+':ans=num1.add(num2);
                    case'-':ans=num1.subtract(num2);
                    case'*':ans=num1.multiply(num2);
                    case'/':{
                        if(num2.equals(BigDecimal.valueOf(0))){
                            errvalue="除数不能为0";
                            return "0";
                        }
                        else ans=num1.divide(num2, 8, BigDecimal.ROUND_HALF_UP);
                    }
                    case'^':{
                        if(new BigDecimal(num1.intValue()).compareTo(num1)==0|| num1.compareTo(BigDecimal.valueOf(0)) < 0||num1.compareTo(BigDecimal.valueOf(1024)) > 0){
                            errvalue="powerror";
                            return "0";
                        }
                        else {
                            ans=num1.pow(num2.intValue());
                        }
                    }
                }
                expl.set(0,ans.toString());
                expl.remove(1);
                expl.remove(2);
            }
            else {
                errvalue="无法识别算式";
                return "0";
            }
        }
        return expl.get(0);
    }
    public List<String> calbrak(String exp){
        List<String> nums = new ArrayList<>();
        if(exp.isEmpty()){
            errvalue="算式为空";
        }
        if(isoper(exp.charAt(0))||isoper(exp.charAt(exp.length()-1))||exp.charAt(0)==')'||exp.charAt(exp.length()-1)=='('){
            errvalue="无法识别算式";
            return nums;
        }
        while(exp.contains("(")||exp.contains(")")){
            if(exp.contains("(")&&!exp.contains(")")||exp.contains(")")&&!exp.contains("(")){
                errvalue="无法识别算式";
                return nums;
            }
            int i=0;
            while(i<exp.length()){
                if(isnum(exp.charAt(i))){
                    int j = i;
                    while(isnum(exp.charAt(i)))i++;
                    nums.add(nums.size(),exp.substring(j,i));
                    if(exp.charAt(i+1)=='(')nums.add("*");
                }
                if(isoper(exp.charAt(i)))nums.add(nums.size(),String.valueOf(exp.charAt(i)));
                if(exp.charAt(i)=='('){
                    int j = i;
                    while(exp.charAt(i)!=')'){
                        if(exp.charAt(i)=='(')j=i;
                        i++;
                    }
                    if(j == i + 1)continue;
                    else nums.addAll(nums.size(),calbrak(exp.substring(j+1,i-1)));
                }
                if(isnum(exp.charAt(i)))
                    i++;
            }
        }
        return nums;
    }

现在第二个函数返回的List是空的,不知道为什么

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2020-09-03 09:15
    关注
    评论

报告相同问题?

悬赏问题

  • ¥100 复现论文:matlab仿真代码编写
  • ¥15 esp32驱动GC9A01循环播放视频
  • ¥15 惠普360g9的最新bios
  • ¥30 这个功能用什么软件发合适?
  • ¥60 微信小程序,取消订单,偶尔订单没有改变状态
  • ¥15 用pytorch实现PPO算法
  • ¥15 关于调制信号的星座图?
  • ¥30 前端传参时,后端接收不到参数
  • ¥15 这是有什么问题吗,我检查许可证了但是显示有呢
  • ¥15 机器学习预测遇到的目标函数问题