JAVA计算器无if或catch ScriptEngineManager
作为我学校的工作,我必须编写一个计算器(args通过命令行传递),没有任何条件操作数,如If、catch或for、while等
我想使用JavaScript进行计算,但我的问题是我得到了java。ClassCastException:java。无法将lang.Integer转换为java。lang.String
请帮我更正代码
import java.math.BigDecimal;
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
public class Calc {
public String doCalc(String string) {
String[] argsList = {};
BigDecimal a = null, b = null;
String operand = null;
try {
argsList = string.split("\\s+");
a = new BigDecimal(argsList[0]);
operand = argsList[1];
b = new BigDecimal(argsList[2]);
//JavaScript arithmetics
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
//JavaScript arithmetics
return (String) engine.eval(a+ " " + operand + " " + b);
} catch (Exception e) {
//e.printStackTrace();
System.out.println("wrong args");
}
return "";
}
}
# 1 楼答案
在返回行中添加一个简单的
toString();
似乎就可以做到这一点该行变为:
根据docs,
eval()
方法返回一个(未指定的)对象,其中toString()
方法似乎正确地转换了结果