这是一个很实用的问题,我们做过:www.htok.net

解决方案 »

  1.   

    我最近用java写了了一个公式计算器,功能如下:一. 能根据需要自由编辑计算公式并得到结果,如编辑(345+345)*3.14+567/34,按“=”按钮即可得到计算结果。二. 支持二、八、十、十六进制的数据计算。三. 公式中可以带入最多三个参数,如编辑公式 (x+456)*y+345/z后,给x,y,z赋值,按“=”按钮即可得到计算结果。  四. 附带一个小型的进制转换器,可以使数据在不同的进制间自由转换。楼主要的话留下邮箱,我发给你
      

  2.   

    lifan5748(易水寒) 
    mail: [email protected] 谢了
      

  3.   

    pcniuniu(pcniuniu)
    程序已经发送,请查收
      

  4.   

    javaflower我也急想得到这个,谢谢mail:[email protected]
      

  5.   

    lifan5748(易水寒)
    收到,不过能不能看看你的code?
      

  6.   

    to:  pcniuniu(pcniuniu)你有哪些不懂的地方我们可以交流,我现在在学校,源码在家里的机子上,家里机子没联网,现在一时拿不到,你要是真的要,我五一放假回去取,到时发给你。
      

  7.   

    lifan5748(易水寒) :
    现在不懂的地方就是得到用户输入的string="1*2+3/4-5",怎么分解string?然后的到运算的最终结果
      

  8.   

    如果有条件可以连接到数据库,让数据库来做.
    Select (345+345)*3.14+567/34 as result from dual
      

  9.   

    [email protected]麻烦你给我发一个
      

  10.   

    [email protected]麻烦你给我发一个,谢谢
      

  11.   

    也给我一个学习一下,我的email:[email protected]
      

  12.   

    import java.io.*;
    import java.util.*;
    public class Hello
    {
    private static int index=-1;
    public static void main(String [] args)
    {
    System.out.println(jisuan("3*(2+3)/(5)-(1-2)*2"));
    System.out.println(jisuan("3*(2+3)/(5-5)-(1-2)*2"));
    }
    private static double jisuan(String s)
    {
    LinkedList<Token>oper=new LinkedList<Token>();
    oper.addFirst(new Token('#',-1));
    LinkedList<Double>num=new LinkedList<Double>();
    String t="";
    for(int i=0;i<s.length();i++)
    {
    if(s.charAt(i)=='(')
    {
    if(t.equals("")!=true)
    {
    num.addFirst(new Double(t));
    t="";
    }
    oper.addFirst(new Token('(',0));
    }
    if(s.charAt(i)==')')
    {
    if(t.equals("")!=true)
    {
    num.addFirst(new Double(t));
    t="";
    }
    while(true)
    {
    Token cur=oper.removeFirst();
    if(cur.c=='(')break;
    double d2=num.removeFirst();
    double d1=num.removeFirst();
    if(cur.c=='+')
    num.addFirst(d1+d2);
    if(cur.c=='-')
    num.addFirst(d1-d2);
    if(cur.c=='*')
    num.addFirst(d1*d2);
    if(cur.c=='/')
    {
    if(d2==0)
    {
    System.out.println("除数为0");
    System.exit(1);
    }
    num.addFirst(d1/d2);
    }
    }
    }
    if(s.charAt(i)=='+')
    {
    if(t.equals("")!=true)
    {
    num.addFirst(new Double(t));
    t="";
    }
    Token tnew=new Token('+',1);
    while(true)
    {
    Token cur=oper.removeFirst();
    if(tnew.level>cur.level)
    {
    oper.addFirst(cur);
    oper.addFirst(tnew);
    break;
    }
    else
    {
    double d2=num.removeFirst();
    double d1=num.removeFirst();
    if(cur.c=='+')
    num.addFirst(d1+d2);
    if(cur.c=='-')
    num.addFirst(d1-d2);
    if(cur.c=='*')
    num.addFirst(d1*d2);
    if(cur.c=='/')
    {
    if(d2==0)
    {
    System.out.println("除数为0");
    System.exit(1);
    }
    num.addFirst(d1/d2);
    }
    }
    }
    }
    if(s.charAt(i)=='-')
    {
    if(t.equals("")!=true)
    {
    num.addFirst(new Double(t));
    t="";
    }
    Token tnew=new Token('-',1);
    while(true)
    {
    Token cur=oper.removeFirst();
    if(tnew.level>cur.level)
    {
    oper.addFirst(cur);
    oper.addFirst(tnew);
    break;
    }
    else
    {
    double d2=num.removeFirst();
    double d1=num.removeFirst();
    if(cur.c=='+')
    num.addFirst(d1+d2);
    if(cur.c=='-')
    num.addFirst(d1-d2);
    if(cur.c=='*')
    num.addFirst(d1*d2);
    if(cur.c=='/')
    {
    if(d2==0)
    {
    System.out.println("除数为0");
    System.exit(1);
    }
    num.addFirst(d1/d2);
    }
    }
    }

    }
    if(s.charAt(i)=='*')
    {
    if(t.equals("")!=true)
    {
    num.addFirst(new Double(t));
    t="";
    }
    Token tnew=new Token('*',2);
    while(true)
    {
    Token cur=oper.removeFirst();
    if(tnew.level>cur.level)
    {
    oper.addFirst(cur);
    oper.addFirst(tnew);
    break;
    }
    else
    {
    double d2=num.removeFirst();
    double d1=num.removeFirst();
    if(cur.c=='+')
    num.addFirst(d1+d2);
    if(cur.c=='-')
    num.addFirst(d1-d2);
    if(cur.c=='*')
    num.addFirst(d1*d2);
    if(cur.c=='/')
    {
    if(d2==0)
    {
    System.out.println("除数为0");
    System.exit(1);
    }
    num.addFirst(d1/d2);
    }
    }
    }

    }
    if(s.charAt(i)=='/')
    {
    if(t.equals("")!=true)
    {
    num.addFirst(new Double(t));
    t="";
    }
    Token tnew=new Token('/',2);
    while(true)
    {
    Token cur=oper.removeFirst();
    if(tnew.level>cur.level)
    {
    oper.addFirst(cur);
    oper.addFirst(tnew);
    break;
    }
    else
    {
    double d2=num.removeFirst();
    double d1=num.removeFirst();
    if(cur.c=='+')
    num.addFirst(d1+d2);
    if(cur.c=='-')
    num.addFirst(d1-d2);
    if(cur.c=='*')
    num.addFirst(d1*d2);
    if(cur.c=='/')
    {
    if(d2==0)
    {
    System.out.println("除数为0");
    System.exit(1);
    }
    num.addFirst(d1/d2);
    }
    }
    }

    }
    if(s.charAt(i)>='0'&&s.charAt(i)<='9'||s.charAt(i)=='.')
    t+=s.charAt(i);

    }
    if(t.equals("")!=true)
    num.addFirst(new Double(t));
    while(oper.size()>1)
    {
    Token cur=oper.removeFirst();
    double d2=num.removeFirst();
    double d1=num.removeFirst();
    if(cur.c=='+')
    {
    num.addFirst(d1+d2);
    }
    if(cur.c=='-')
    num.addFirst(d1-d2);
    if(cur.c=='*')
    num.addFirst(d1*d2);
    if(cur.c=='/')
    {
    if(d2==0)
    {
    System.out.println("除数为0");
    System.exit(1);
    }
    num.addFirst(d1/d2);
    }

    }

    return num.getFirst();

    }


    }
    class Token
    {
    public char c;
    public int level;//运算优先级 :(:0  +:1  -:1 *:2 /:2 ):3
    public Token(char c,int level)
    {
    this.c=c;
    this.level=level;

    public String toString()
    {
    return ""+c+" "+level;
    }
    }
      

  13.   

    System.out.println(jisuan("3*(20.5+3)/(5)-(1-2)*2"));