评估字符串时不正确的答案

时间:2012-06-07 17:39:29

标签: java javascript scriptengine

我的代码如下所示:

    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按预期打印错误,但第二个SOP打印为true。当我将变量与两个值进行比较时,它不会给出正确的结果。它给出了真实,即使条件的一半是真的。有什么解决方法吗?请建议。感谢。

4 个答案:

答案 0 :(得分:8)

2 < x < 5没有按照您的想法行事。评估如下:

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

请尝试(2 < x) && (x < 5)

答案 1 :(得分:4)

将我的评论转为答案

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

答案 2 :(得分:3)

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

  1. 2&lt; x =&gt;真
  2. true&lt; 5 =&gt; 1&lt; 5(类型强制)
  3. 1&lt; 5 =&gt;真

答案 3 :(得分:1)

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

System.out.println((Boolean)engine.eval(“2&lt; x&amp;&amp; x&lt; 5”));