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を出力しますが、2番目のSOPはtrueを出力します。変数を2つの値と比較すると、正しい結果が得られません。条件の半分が真であっても、それは真になります。これに対する回避策はありますか?提案してください。ありがとう。

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

私のコメントをアンサーに変える

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((ブール値) engine.eval("2 < x && x < 5"));

于 2012-06-07T17:45:30.050 に答える