首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JEP的概念清晰度

JEP的概念清晰度
EN

Stack Overflow用户
提问于 2021-11-22 10:57:19
回答 1查看 41关注 0票数 0

我有一个变量,它的值取决于其他变量。这种依赖性是以逻辑表达式的形式定义的。例如:如果有一个变量A,在它的数据类型中,会提到与其他变量的关系。ie: A= (B&&C)||D

现在,这需要进行表达式解析,我已经使用了JEP( Java expression parser)。

B、C、D的值可以是4.0、1.0和3.0。解析后A的值将是1.0。

这是否意味着jep内部检查赋值是否大于0,如果发现大于0,则将其视为1?

代码语言:javascript
复制
String formula = "(B && C)||D";
JEP jep = new JEP();
jep.addVariable("B", 4.0);
jep.addVariable("C", 1.0);
jep.addVariable("D", 3.0);
jep.parseExpression(formula);
Number value = jep.getValue();
System.out.println("Value: " +value);




-------------------------------------
output:
Value: 1.0

虽然1.0的结果是我想要的,但我不明白它是如何在内部发生的。当我在纸上做这件事时,我会得到以下结果

代码语言:javascript
复制
4 && 1 = 0100
         0001
--------------
         0000
||3      0011
---------------
         0011
So my paper method gives me 3.

内部发生了什么?有人能给我提供一些见解吗?

EN

回答 1

Stack Overflow用户

发布于 2021-11-22 11:35:35

我假设您在这里谈论的JEP是由Singular System Inc;http://www.singularsys.com/jep/生产的Jep Java

我查阅了相关文档,得出的结论是它不是真正的Java (TM)表达式解析器。相反,它正在实现一种“类似Java”的表达式语言。

(例如,在真正的Java中,BCD将具有类型double,而(B && C) && D将是无效的……因为&&||仅为boolean参数定义。)

似乎JEP将数字视为&&||的真值,以及(可能)关系运算符==!=<等的结果。所以本例中的(B && C) || D)正在计算(true && true) || true),也就是true ...那就是1

不幸的是,JEP的文档相当粗略。在JEP站点上的文档中,我找不到任何实际说明如何处理真值的内容。

另一个线索是,在(真正的)Java语言中,按位AND和OR运算符是&|。此外,JEP在“按位运算符表”中支持这些运算符和其他运算符。

我建议你把这个表达改成(B & C) | D ...看看这是否会给你带来你所期望的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70064677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档