2

我的代码如下所示:

    ScriptEngineManager factory = new ScriptEngineManager();
    ScriptEngine engine = factory.getEngineByName("JavaScript");
    int x = 10;
    engine.eval("x =" + x);
    System.out.println((Boolean) engine.eval("x < 5"));
    System.out.println((Boolean) engine.eval("2 < x < 5"));

第一个 SOP 按预期打印为 false,但第二个 SOP 打印为 true。当我将变量与两个值进行比较时,它没有给出正确的结果。即使条件的一半为真,它也会给出真值。有什么解决方法吗?请建议。谢谢。

4

4 回答 4

8

2 < x < 5不做你认为它做的事。评估如下:

2 < x < 5
(2 < x) < 5
(2 < 10) < 5
true < 5
1 < 5
true

试试(2 < x) && (x < 5)吧。

于 2012-06-07T17:44:11.553 回答
4

将我的评论转为 anwser

2 < x < 5 => (2 < 10 ) < 5 => (true) < 5 => 1 < 5 => true

于 2012-06-07T17:44:57.613 回答
3

不,它实际上产生了正确的结果。您的表达式是这样评估的:

  1. 2 < x => 真
  2. true < 5 => 1 < 5(类型强制)
  3. 1 < 5 => 真
  4. 真的
于 2012-06-07T17:45:04.947 回答
1

要解决此问题,请尝试指定必须满足这两个条件。

System.out.println((Boolean) engine.eval("2 < x && x < 5"));

于 2012-06-07T17:45:30.050 回答