我可以使用char在Java中进行计算

时间:2013-08-13 16:59:15

标签: java

为了节省做if else语句的时间,我是否可以做以下的事情?

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

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

请告知。

4 个答案:

答案 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时遇到一些问题。因此,不要让用户直接输入要评估的表达式。然而,使用变量(xyz就像这样)可以解决这个问题。

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

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

例如,在我的计算机上产生“46”

答案 3 :(得分:0)

输出应为1 + 2 + 43 = 46

对于char,它将采用'+'

的Ascii值