Incorrect Answers when evaluating a String
-
13-06-2021 - |
سؤال
My code looks like this:
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"));
The first SOP prints false as expected, but the second SOP prints true. It doesn't give correct results when I compare the variable with two values. It gives true, even if half of the condition is true. Any workaround for this? Please suggest. Thanks.
المحلول
2 < x < 5
doesn't do what you think it does. It's evaluated as follows:
2 < x < 5
(2 < x) < 5
(2 < 10) < 5
true < 5
1 < 5
true
Try (2 < x) && (x < 5)
instead.
نصائح أخرى
Turning my comment to an anwser
2 < x < 5 => (2 < 10 ) < 5 => (true) < 5 => 1 < 5 => true
No it is actually producing the correct result. Your expression is evaluated like this:
- 2 < x => true
- true < 5 => 1 < 5 (type coercion)
- 1 < 5 => true
- true
To work around try specifying that both conditions must be met.
System.out.println((Boolean) engine.eval("2 < x && x < 5"));
لا تنتمي إلى StackOverflow