0

我是否可以执行以下类似操作以节省执行 if else 语句的时间?

int x = 1;
int y = 2;
char z = '+';

System.out.println(x + z + y); //e.g. 1 + 2 i.e. 3

请指教。

4

4 回答 4

4

你不能。在您的表达式中,'+'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 (xyz你一样) 可以解决这个问题。

于 2013-08-13T17:05:05.943 回答
3

不,这不会按预期工作。(它将编译并运行,但由于 unicode 值为+0x2B 或 43,并且char在这种情况下 a 被视为数字,因此您的表达式x + z + y计算结果为1 + 43 + 2,因此它打印 46)您可以使用if/elseswitch语句来评估什么操作to do,这适用于简单的输入,或者您可以查看更通用的表达式解析库,例如exp4jjexel

于 2013-08-13T17:03:50.250 回答
0

这将编译但不会以您期望的方式运行。

z 将被转换为 int,这将是该字符在默认字符集中的值(很可能是 ASCII)。

例如,在我的计算机上导致“46”

于 2013-08-13T17:05:34.540 回答
0

输出应该是1 + 2 + 43 = 46

对于 char,它将采用 '+' 的 Ascii 值

于 2013-08-13T17:07:15.717 回答