想做一个简单的计算器,在一个textField里面直接输入计算式子,比如"1*8+9-6/2*9+1",通过一个String把这个公式读取了,然后把这一String转换成语句得出计算结果?请问这样该如何实现吗??求教,谢谢了~!

解决方案 »

  1.   

    可以把这个运算表达式的语句重新生成一个Java程序在Caculator.java, 如:
    String caculatorStr = "public class Calculator {"
    + "       public static void main(String[] args) {"
    + "             int a =" + 刚才的表达式字符串
    + "       }"
    + "}"; 再加上把结果写入文件的语句.再写一个bat文件:
    javac Calculator.java
    java Calculator当你按下回车的时候, 用Runtime来运行这个bat文件, 编译运行这个新生成的程序, 然后把运行后的结果保存到文件. 当前程序再从文件中读取这个结果显示出来.吼吼.
      

  2.   

    js 里有eval("1*8+9-6/2*9+1")可以直接运算。
      

  3.   

    如果单纯是没括号这种, 从左到右可以遍历 遇到* / 找到左右的数字运算, 再算 + - 的直到没运算符。 ---好像比较笨。。如果是有扩号那种就麻烦些了, 可能要用堆栈实现逆波兰式,估计要看看瞄瞄数据结构了http://www.cjsdn.net/post/view?bid=1&id=130280&sty=3
      

  4.   

    大体上两种方法 
    一种走数据结构 逆波兰表达式
    一种走动态执行 可以去网上找现成的开发包 如MVEL等(可能运算四则还不成熟)
    或js的eval 再或就是如3楼的思路 不过可以 通过IO构建新类 调用cmd命令编译 和 反射执行
      

  5.   

    按照 5、6 楼说的吧,把中缀表达式转换成后缀表达式。如果是 JDK 6 的话,可以使用它提供的 JavaScript 引擎,使用 eval 函数来计算。
      

  6.   

    答:很简单。用JEP吧。有名的JAVA表达式类库包。
    import org.nfunk.jep.*;//第一步:创建一个分析器对象
    JEP myParser = new oJEP();//第二步:求值。
    myParser.parseExpression("1*8+9-6/2*9+1+(1+2)*(3+4)");//第三步:返回表达式结果
    double result = myParser.getValue();
      

  7.   

    问题已经用逆波兰式解决!
    分给了第一个给出建议的5楼zealVampire  谢谢!