有没有大神帮忙改一下 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是空的,不知道为什么

https://blog.csdn.net/u011102153/article/details/44957991