譬如说在cmd下输入
java postfixCal 23+4-
会得到1?

解决方案 »

  1.   

    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("操作符不合法");
    }
    }}
      

  2.   

    你需要用空格来分隔参数,如:java PostFix 2 3+4-
      

  3.   

    main入口参数'*'是不能使用的,JAVA没法正确获得这个字符的,请用其他字符代替乘号。
      

  4.   

    用引号可以解决这个问题java PostFix 2 3 "*"