有经验的帮帮忙,不知道有没有现成的程序?需求是这样的,我这里简化一下。
比如一个界面上有一些按钮,按钮上写着“A”、“B”,“C”,“D”,
还有一些运算符号,比如“+","-","*","/","(",")"。
这样就是允许用户自己组装一个运算公式,比如依次点A,*,C,+,(,B,+,D,)
这样就是A*C+(B+D)的公式,当然,用户可以任何组合一个有效的公式。
公式组合完后,我需要把值代进去,然后得出结果,比如A=2,B=3,C=4,D=5的话,
结果就是2*4+(3+5)=16。
这只是比较简单的公式,我这里只是为了简化问题的描述。另外甚至还要求有一些条件判断,比如有一些IF、ELSE,>,<=之类的按钮,这样就更复杂了,
不知道有没有现成的程序?如果谁帮我彻底解决这个问题,给500分都没问题!

解决方案 »

  1.   

    这个应该不难,给个简单的思路,看看对你有没有帮助你得有4个基本运算的函数(这个是肯定不要说的啦)把所有的信息全收下可以放到string里去
    然后对这个字符串进行解析,
    所先要判断这个字符串是不是正确的,
    然后,按照运算的优先级的逆顺序进行处理
    function0 :找匹配的(),将结果替换回来
    function1 :找+,把这个字符串分成若干个和的子部分,然后对各个子部分进行处理
    function2: 找-,把字符串分成若干个子部分的减
    function3: 找*, 把字符分解为各个部分的*
    function4: 找/,把字符分解为各个部分的/mainfunction(oper_string){
       //如果oper_string是数字就直接return了
       oper_string = function0(oper_string);
       oper_string = function1(oper_string);
       oper_string = function2(oper_string);
       oper_string = function3(oper_string);
       oper_string = function4(oper_string);
    }
    function1{
        //得到+的各个部分string[] adds,是数字要处理
         
        for(i=0;i<adds.length....){
           mainfunction(adds[i]);子部分也需要做对应的处理
       }
       
    }你自己多想想吧,我想上面的肯定能完成
      

  2.   

    我当然知道编译原理,不过我现在在考虑使用ANTLR,
    谢谢楼上各位,继续欢迎提供现成的JAR。
      

  3.   

    你的“有效的公式”不就是一个字符串吗?~
    使用“栈|stack”不是能很方便的解决嘛!~
      

  4.   

    我这里是简单的例子说明问题啦,需求里还要有会有一定的逻辑,比如
    IF A>100 THEN
     A*B+(C+D)
    ELSE
     A*B/(C+D)
    ENDIF而且IF之类要用中文,就是
    如果 A>100 则
    ...