读书人

怎么用递归方法实现postfix计算

发布时间: 2012-03-13 11:21:12 作者: rapoo

如何用递归方法实现postfix计算?
譬如说在cmd下输入
java postfixCal 23+4-
会得到1?

[解决办法]

Java code
import java.util.LinkedList;import java.util.List;public class PostFix {    public static void main(String[] args) {                StringBuilder sb = new StringBuilder();        for(int i=0;i<args.length;i++)            sb.append(args[i]+" ");        System.out.println(calPostFix(sb.toString()));    }    private static double calPostFix(String str)    {                List<String> parts = new LinkedList<String>();        for(int i=0;i<str.length();)        {            if(str.charAt(i)==' ')            {                i++;                continue;            }            int pos = i;            while(Character.isDigit(str.charAt(i))  || str.charAt(i)=='.') //数字                i++;            if(pos!=i)            {                parts.add(str.substring(pos, i));                continue;            }            //操作符            parts.add(str.charAt(i++)+"");                    }                double nowValue = Double.parseDouble(parts.get(0));        return calPostFixParts(parts, 1, nowValue);                    }        /**这里递归调用**/    private static double calPostFixParts(List<String> parts, int pos, double nowValue)    {        if(pos>=parts.size())            return nowValue;                double res = cal(nowValue, parts.get(pos), parts.get(pos+1));        return calPostFixParts(parts, pos+2, res);    }    protected static double cal(double m, String b, String operator)    {        if(operator.length()!=1)            throw new RuntimeException("操作符不合法");                Character op = operator.charAt(0);        double n = Double.valueOf(b);        switch(op)        {        case '+':return m+n;        case '-':return m-n;        case '*':return m*n;        case '/':return m/n;        case '^':return Math.pow(m, n);        default:throw new RuntimeException("操作符不合法");        }    }} 

读书人网 >J2SE开发

热点推荐