验证公式的正确性目前我认为在java下用正则表达式比较好实现,但是正则表达式我不太会公式的的是第一位为K或Z或C;第二位是数字,例如0;第三位是$,即美元;第四位以后是数字,但是位...
验证公式的正确性
目前我认为在java下 用正则表达式比较好实现,但是正则表达式我不太会
公式的的是第一位为K或Z或C;第二位是数字,例如0;第三位是$,即美元;第四位以后是数字,但是位数不限,可以有小数点。以上规则例如是Z0$1001.98是符合规则的。
可以函数,例如max(Z1$1001-Z1$1001,0),或是If {Z0$1001<=0} then {0} else {Z0$1001}
公式可以是
1、Z0$1001.98
2、Z0$1001.98+K0$1021.98
3、(Z0$1001.98+K0$1021.98)+Z0$1001.98
4、max(Z1$1001-Z1$1001,0)
5、(Z0$1001+K1$1001)+C2$1001-max(Z1$1001-Z1$1001,0)
6、max(Z1$1001-Z1$1001,0)+K0$1021.98+if{Z0$1001<=0} then {0} else {Z0$1001}
公式中所有参与运算的项都必须遵循
1、运算项定义
2、运算符保留字必须使用小写字符,包括:max,min,abs,round,if,then等
如果不是用正则表示式实现也可以,但是要在java下实现。
求高手帮忙,如果写得好还可以再加分!!
我的目的只是想验证公式的正确性,不一定全用正则表达式来实现。
用特殊的符号将所有的嵌套运算子包起来是不现实的,公式是用户输入的,用户不会整那么麻烦的。
我想了一下,我的思路是将Z0$1001等先替换为A,例如(Z0$1001.98+K0$1021.98)+Z0$1001.98替换为(A+A)+A。接着将A+A替换为A,则为(A)+A,再将(A)替换为A,则为A+A,再循环上几步。函数也是一样,例如将max(A,A)也替换为A。再不断循环,直到公式到不能再简化为止。最后如果公式简化为A,说明公式正确,否则报错!
至于替换可以用正则表达式实现。程序本来想贴出来,但是字数超过1000字了。
但是有两个问题。一个是不能提示用户错误的原因。二是我现在还要找到如Z0$1001中1001这个值,结合Z到后台去查询这个1001是否在Z的表中存在。目前这两个问题我还没想好。
刚看了你的算法,觉得很好。
最后等你写完了再给你加分吧。
我编程不太好,看出来你是高手,帮帮小弟吧。
现在对于提示错误的问题我还是很无助,例如ZE$122 这个是Z后的E是非法的,或则函数写错了,例如用户写max为mac之类的错误,该如何提示用户呢。还有如何在一个字符串中提取出Z0$234之类的信息。
展开