有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    在返回行中添加一个简单的toString();似乎就可以做到这一点

    该行变为:

    return engine.eval(a+ " " + operand + " " + b).toString();
    

    根据docseval()方法返回一个(未指定的)对象,其中toString()方法似乎正确地转换了结果