为了节省做if else语句的时间,我是否可以做以下的事情?
int x = 1;
int y = 2;
char z = '+';
System.out.println(x + z + y); //e.g. 1 + 2 i.e. 3
请告知。
答案 0 :(得分:4)
你做不到。在表达式中,'+'
char将转换为其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 String
直接评估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
注意: there can be使用ScriptEngine
时遇到一些问题。因此,不要让用户直接输入要评估的表达式。然而,使用变量(x
,y
和z
就像这样)可以解决这个问题。
答案 1 :(得分:3)
不,这不会按预期工作。 (它将编译并运行,但由于+
的unicode值为0x2B或43,并且char
在这种情况下被视为数字,因此表达式x + z + y
的计算结果为{ {1}},因此它打印46)您可以使用1 + 43 + 2
/ if
或else
语句来评估要执行的操作,哪些操作适用于简单输入,或者您可以查看更通用的表达式解析库,例如exp4j或jexel。
答案 2 :(得分:0)
这将编译但不会以您期望的方式运行。
z将转换为int,这将是默认字符集中的字符值(很可能是ASCII)。
例如,在我的计算机上产生“46”
答案 3 :(得分:0)
输出应为1 + 2 + 43 = 46
对于char,它将采用'+'
的Ascii值