【发布时间】:2013-08-13 16:59:15
【问题描述】:
我是否可以执行以下操作以节省执行 if else 语句的时间?
int x = 1;
int y = 2;
char z = '+';
System.out.println(x + z + y); //e.g. 1 + 2 i.e. 3
请指教。
【问题讨论】:
-
你想做什么?
标签: java
我是否可以执行以下操作以节省执行 if else 语句的时间?
int x = 1;
int y = 2;
char z = '+';
System.out.println(x + z + y); //e.g. 1 + 2 i.e. 3
请指教。
【问题讨论】:
标签: java
你不能。在您的表达式中,'+' 字符被转换为它的int 值。 (该表达式的结果将是 46: 1 + 43 + 2)。
您必须使用if(或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
如果您只对结果感兴趣,可以直接使用 Java 的 JavaScript ScriptEngine 评估 String:
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
注意: there can be 使用 ScriptEngine 的一些问题。所以不要让用户直接输入要计算的表达式。不过,使用变量(x、y 和 z 就像你一样)可以解决这个问题。
【讨论】:
这将编译但不会以您期望的方式运行。
z 将被转换为 int,这将是该字符在默认字符集中的值(很可能是 ASCII)。
例如,在我的计算机上,结果为“46”
【讨论】:
输出应该是1 + 2 + 43 = 46
对于char,它将采用'+'的Ascii值
【讨论】: