一种基于公式的自动计算方法与流程

文档序号:12120082阅读:573来源:国知局

本发明涉及JAVA开发技术领域,具体涉及一种基于公式的自动计算方法。



背景技术:

目前,在JAVA的研发过程中,当一个算法需要调整时,需要通过修改代码的方式实现。算法的内部操作过程需要可以通过调整代码方便的实现,但这种效率非常低;而且当这种算法需要频繁调整时,研发人员需要不断的修改代码以适应相应的调整工作。而且这种方法还存在一个非常严重的弊端:它需要修改原来算法的java文件。这就需要对应用进行重新编辑、打包、发布,新的算法才会生效。这种方法非常不适用于目前高效、高可用的场合。



技术实现要素:

本发明解决的技术问题在于提供一种基于公式的自动计算方法,可自动解析计算公式,并根据计算公式中的变量名,自动从map对象中获取具体的值;并完成变量的初始化工作,最终完成整个计算过程。

本发明解决上述技术问题的技术方案是:

所述的方法是通过字符串的方式记录算法公式,并通过Map对象存放计算公式中变量的值;自动解析计算公式,并根据计算公式中的变量名,自动从map对象中获取具体的值,完成变量的初始化工作;最终完成整个计算过程。

所述的方法是在Map对象中,key为公式中的变量名,value为变量的具体值;

在解析阶段,首先解析计算公式中所有的变更和运算符,并按顺序存放在List对象中;

在计算阶段,按照List的顺序,从前往后进行数学运算;首先通过list获取运算符及该运算符前后的变量名;然后通过该变量名,在Map中获取具体的数值;第三,根据运算符,将数值进行相应的运算,并把计算结果重新放入至Map对象中,而该结果的key值为不可重复的字符串,然后再把该字符串存放在list中;第四,把已经完成运算的变量及运算符,从list中删除;第五,通过新的list和Map,重新调用计算方法,直到计算结束。

所述的方法具体步骤如下:

第1步、初始化计算公式f,可令f=ab+c-c*d-e/f*g;

第2步、以f中的变更中key,初始化map,并把各变量的值存放至map中;

第3步、通过f中的运算符,解析公式f,并把各变量及运算符按先后顺序存放至list中;

第4步、判断list的长度是否为3,如果是,则跳转到第14步;如果为否,则跳转至第5步;

第5步、通过list,获取其下标为3的对象op;

第6步、判断op是否为乘法或除法,如果是,则跳转至第7步;如果为否,则跳转至第10步;

第7步、通过list下标2和4,获取操作数preKey和nextKey;并通过preKey和nextKey在map中获取具体的值preValue和nextValue;

第8步、根据op,对preValue和nextValue进行相应的计算,其结果记录为minValue;把minValue存放至map对象中,其key值为不可重复的值;

第9步、通过list,删除下标为4、3、2的变量;同时把minValue存放在list中,设定其下标为2;并跳回至第4步;

第10步、通过list下标1,获取运算符op;

第11步、通过list下标0和2,获取操作数preKey和nextKey;并通过preKey和nextKey在map中获取具体的值preValue和nextValue;

第12步、根据op,对preValue和nextValue进行相应的计算,其结果记录为minValue;把minValue存放至map对象中,其key值为不可重复的值;

第13步、通过list,删除下标为2、1、0的变量;同时把minvalue存放在list中,设定其下标为0;并跳回至第4步;

第14步、通过list下标1,获取运算符op;

第15步、通过list下标0和2,获取操作数preKey和nextKey;并通过preKey和nextKey在map中获取具体的值preValue和nextValue;

第16步、根据op,对preValue和nextValue进行相应的计算,并把结果返回。

本发明的有益效果是:本发明通过字符串的方式记录算法公式,并通过Map对象存放计算公式中变量的值。本方法可自动解析计算公式,并根据计算公式中的变量名,自动从map对象中获取具体的值。并完成变量的初始化工作,最终完成整个计算过程。当需要调整计算过程时,只需要调整计算公式即可,整体计算过程无需做任何的调整工作。对于计算方法不停做调整的业务场合,本方法即可提供高效的实现方式,而且无需对源代码进行编辑、打包,大大提高了应用系统的可用性;而且这种方法,只需要调整公式,并完成公式中的变量,对整个过程无需做任何的调整,大大提高了开发效率,特别是在报表等算法高频调整的模块中,本方法可以提供非常良好的解决方法。

附图说明

下面结合附图对本发明进一步说明:

图1为本发明的流程图。

具体实施方式

本发明使用JAVA语言实现,它通过字符串的方式记录算法公式,并通过Map对象存放计算公式中变量的值。在Map对象中,key为公式中的变量名,value为变量的具体值。在解析阶段,首先解析计算公式中所有的变更和运算符,并按顺序存放在List对象中。而在计算阶段,本方法按照List的顺序,从前往后进行数学运算。首先通过list获取运算符及该运算符前后的变量名。然后通过该变量名,在Map中获取具体的数值;第三,根据运算符,将数值进行相应的运算,并把计算结果重新放入至Map对象中,而该结果的key值为不可重复的字符串,然后再把该字符串存放在list中;第四,把已经完成运算的变量及运算符,从list中删除;第五,则通过新地list和Map,重新调用计算方法,直到计算结束。通过这种递归的方法,最终使用list的变量清空,及时计算则结束。

具体步骤如下:

第1步、初始化计算公式f,如f=ab+c-c*d-e/f*g;

第2步、以f中的变更中key,初始化map,并把各变量的值存放至map中;

第3步、通过f中的运算符,解析公式f,并把各变量及运算符按先后顺序存放至list中;

第4步、判断list的长度是否为3,如果是,则跳转到第14步;如果为否,则跳转至第5步;

第5步、通过list,获取其下标为3的对象op;

第6步、判断op是否为乘法或除法,如果是,则跳转至第7步;如果为否,则跳转至第10步;

第7步、通过list下标2和4,获取操作数preKey和nextKey;并通过preKey和nextKey在map中获取具体的值preValue和nextValue;

第8步、根据op,对preValue和nextValue进行相应的计算,其结果记录为minValue;把minValue存放至map对象中,其key值为不可重复的值;

第9步、通过list,删除下标为4、3、2的变量;同时把minvalue存放在list中,设定其下标为2;并跳回至第4步;

第10步、通过list下标1,获取运算符op;

第11步、通过list下标0和2,获取操作数preKey和nextKey;并通过preKey和nextKey在map中获取具体的值preValue和nextValue;

第12步、根据op,对preValue和nextValue进行相应的计算,其结果记录为minValue;把minValue存放至map对象中,其key值为不可重复的值;

第13步、通过list,删除下标为2、1、0的变量;同时把minvalue存放在list中,设定其下标为0;并跳回至第4步;

第14步、通过list下标1,获取运算符op;

第15步、通过list下标0和2,获取操作数preKey和nextKey;并通过preKey和nextKey在map中获取具体的值preValue和nextValue;

第16步、根据op,对preValue和nextValue进行相应的计算,并把结果返回。

如附图1所示;具体以孵化器综合管理平台的综合服务能力测评为例,演示本方法的操作过程。包括如下步骤:

第1步、初始化计算公式f,如f=ab+c-c*d-e/f*g+h/i;

第2步、通过数据库查询,初始化ab、c、d、e、f、g的值,初始化map对象:

Map<String,String>map=new HashMap<string,string>();

map·put(″ab″,″10″);

map·put(″b″,″32″);

map·put(″c″,″10″);

map·put(″d″,″5″);

map·put(″e″,″12″);

map·put(″f″,″1.2″);

map·put(″g″,″2″);

map·put(″h″,″21″);

map.put(″i″,″1″);

第3步、以map和f为参数,调整本方法的解析方法,返回list;

第4步、以map和list的参数,调用本方法的计算方法,返回结果-7。

本方法中,当公式计算过程需要做调整时,只需要调整计算公式,并设置公式中的变量值即可,因此无运算过程进行调整。本方法会根据运算公式,重新加载运算过程,并完成计算。本方法不变非常方便灵活,而且对于频繁调整计算过程的业务非常适合。整个过程也无需重新编辑、打包,只需要把修改后的xml文件替换原项目中的xml文件即可,大大提高了应用部署的难度,而且提高了服务的有效性。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1