各位高手,能否帮我解决一个问题!
写一个函数,实现复杂的运算,比如输入(1+2)/3,怎样得出结果,支持字符串输入。

解决方案 »

  1.   

    http://baike.baidu.com/view/552648.htm?func=retitle
      

  2.   

    你们所说的是不是用.net做的呀,在java里面怎么做啊?
      

  3.   

    请问下,用这个逆波兰表达式做的这个函数怎么样能支持字符串和add()函数的运算呢?
      

  4.   

    这段程序只支持 正数的 + - * / () ,还不是很完善啦,负数 -X 只能通过 (0-X) 来表示! 楼主,满意了不?
    class Class1
    {
     public static void main(String[] args) 
     {
      System.out.println("Hello World!");
      //中缀 => 后缀表达式
      String s = "(  1.9   +  (20 +  41)    / (25 * 11) -     3          )              * 2"; //中缀
      String S = ""; //后缀
      char[] Operators = new char[s.length()];
      int Top = -1;
      for (int i = 0; i < s.length(); i++)
      {
       char C = s.charAt(i);
       switch(C)
       {
        case ' ' :
         break;
        case '+' : //操作符
        case '-' :
         while (Top >= 0) //栈不为空时
         {
          char c = Operators[Top--]; //pop Operator
          if (c == '(')
          {
           Operators[++Top] = c; //push Operator
           break;
          }
          else
          {
           S = S + c;
          }
         }
         Operators[++Top] = C; //push Operator
         S += " ";
         break;
        case '*' : //操作符
        case '/' :
         while (Top >= 0) //栈不为空时
         {
          char c = Operators[Top--]; //pop Operator
          if (c == '(')
          {
           Operators[++Top] = c; //push Operator
           break;
          }
          else
          {
           if (c == '+' || c == '-')
           {
            Operators[++Top] = c; //push Operator
            break;
           }
           else
           {
            S = S + c;
           }
          }
         }
         Operators[++Top] = C; //push Operator
         S += " ";
         break;
        case '(' : //操作符
         Operators[++Top] = C;
         S += " ";
         break;
        case ')' : //操作符
         while (Top >= 0) //栈不为空时
         {
          char c = Operators[Top--]; //pop Operator
          if (c == '(')
          {
           break;
          }
          else
          {
           S = S + c;
          }
         }
         S += " ";
         break;
        default : //操作数
         S = S + C;
         break;
       }
      }
      while (Top >= 0)
      {
       S = S + Operators[Top--]; //pop Operator
      }  System.out.println(S); //后缀  //后缀表达式计算
      double[] Operands = new double[S.length()];
      double x, y, v;
      Top = - 1;
      String Operand = "";
      for (int i = 0; i < S.length(); i++)
      {
       char c = S.charAt(i);
       if ((c >= '0' && c <= '9') || c == '.')
       {
        Operand += c;
       }   if ((c == ' ' || i == S.length() - 1) && Operand != "") //Update
       {
        Operands[++Top] = java.lang.Double.parseDouble(Operand) ; //push Operands
        Operand = "";
       }   if (c == '+' || c == '-' || c == '*' || c == '/')
       {
        if ((Operand != ""))
        {
         Operands[++Top] = java.lang.Double.parseDouble(Operand) ; //push Operands
         Operand = "";
        }
        y = Operands[Top--]; //pop 双目运算符的第二操作数 (后进先出)注意操作数顺序对除法的影响
        x = Operands[Top--]; //pop 双目运算符的第一操作数
        switch (c)
        {
         case '+' :
          v = x + y;
          break;
         case '-' :
          v = x - y;
          break;
         case '*' :
          v = x * y;
          break;
         case '/' :
          v = x / y; // 第一操作数 / 第二操作数 注意操作数顺序对除法的影响
          break;
         default :
          v = 0;
          break;
        }
        Operands[++Top] = v; //push 中间结果再次入栈
       }
      }
      v = Operands[Top--]; //pop 最终结果
      System.out.println(v);
     }