码迷,mamicode.com
首页 > 编程语言 > 详细

java字符串转算术表达式(进阶篇)

时间:2017-08-20 00:48:29      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:运行   alt   地址   http   cal   handle   ret   需要   values   

今天我们要将前两篇的随笔总结一下,用面向对象的思想封装一下,使它能够更容易的扩展。 

首先我们要设计一个类,让他能够同时表示操作符和操作数

技术分享

public enum OperationType {
    /**
     * 操作值
     */
    VALUE,
    /**
     * 操作符
     */
    SYMBOL;

}

这里的操作数不是我们设计的问题所在,主要是操作符,我们操作符设计成这样

技术分享

flag():操作符的指定标识

priority():操作符的优先级

numOfSymbol():操作符的优先级操作符的优先级

operation():将结果封装成Operation

cal():计算结果

示例代码:

/**
 * 加号操作符
 * 
 * @author sbtufss
 * 
 */
public class PlusSymbol extends Symbol {
    @Override
    public String flag() {
        return "+";
    }

    @Override
    public SymbolPriority priority() {
        return SymbolPriority.PLUS;
    }

    @Override
    public int numOfSymbol() {
        return 2;
    }

    @Override
    public double cal(double[] values) {
        // TODO Auto-generated method stub
        return values[0] + values[1];
    }

}

而,到了这一步,我们还需要一个操作符管理器,来告诉表达式,我能处理那些操作符

技术分享

然后我们来看一下他的子类CommonSymbolManager.java

/**
 * 管理操作符字符串所对应的操作符类
 * 
 * @author sbtufss
 * 
 */
public class CommonSymbolManager extends SymbolManager {

    public CommonSymbolManager() {
        super();
        list.add(new PlusSymbol());
        list.add(new ReduceSymbol());
        list.add(new MultSymbol());
        list.add(new DivideSymbol());
    }
}

这个类默认添加了加减乘除这四个操作符,而我们要添加自己自定义的操作符时,应该怎么办呢?

实际上我们只需要在处理字符串表达式之前来添加进去就行了,ok,上代码

public static void main(String[] args) {
        Calculator calculator = new Calculator();
        calculator.getSymbolManager().add(new MathPowSymbol());//添加自定义的操作符
        calculator.handleStr("(2+3.2)+Math.pow(3,2)*(40-5+(-1)*4)");
    }

运行结果

技术分享

 相关源码在github上面:

git地址https://github.com/sbtufss/calculate.git

 

java字符串转算术表达式(进阶篇)

标签:运行   alt   地址   http   cal   handle   ret   需要   values   

原文地址:http://www.cnblogs.com/pig-brother/p/7398274.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!