我是否可以执行以下类似操作以节省执行 if else 语句的时间?
int x = 1;
int y = 2;
char z = '+';
System.out.println(x + z + y); //e.g. 1 + 2 i.e. 3
请指教。
我是否可以执行以下类似操作以节省执行 if else 语句的时间?
int x = 1;
int y = 2;
char z = '+';
System.out.println(x + z + y); //e.g. 1 + 2 i.e. 3
请指教。
你不能。在您的表达式中,'+'
char 被转换为其int
值。(该表达式的结果将是46
:1 + 43 + 2)。
您必须使用if
(or switch
) 语句:
int x = 1;
int y = 2;
char z = '+';
if (z == '+') System.out.println(x + y);
else if (z == '-') System.out.println(x - y);
// else if (z == '*') ... and so on
如果您只对结果感兴趣,您可以String
直接使用 Java 的 JavaScript评估ScriptEngine
:
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
public class Eval {
public static void main(String[] args) throws Exception {
ScriptEngineManager s = new ScriptEngineManager();
ScriptEngine engine = s.getEngineByName("JavaScript");
int x = 1;
int y = 2;
char z = '+';
String exp = "" + x + z + y;
System.out.println(engine.eval(exp));
}
}
输出:
3.0
注意 :使用. ScriptEngine
所以不要让用户直接输入要计算的表达式。不过,使用 with variables (x
和y
像z
你一样) 可以解决这个问题。
这将编译但不会以您期望的方式运行。
z 将被转换为 int,这将是该字符在默认字符集中的值(很可能是 ASCII)。
例如,在我的计算机上导致“46”
输出应该是1 + 2 + 43 = 46
对于 char,它将采用 '+' 的 Ascii 值