【问题标题】:Can I use a char to do calculation in Java我可以使用 char 在 Java 中进行计算吗
【发布时间】: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


【解决方案1】:

你不能。在您的表达式中,'+' 字符被转换为它的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 的一些问题。所以不要让用户直接输入要计算的表达式。不过,使用变量(xyz 就像你一样)可以解决这个问题。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      例如,在我的计算机上,结果为“46”

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-04-12
          • 1970-01-01
          • 2011-10-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多