1

我将如何计算String number = "3^6"?有计算指数的数学选项,但我如何将字符串转换为 java 数学类可以解决的问题?

4

2 回答 2

1
String s = "3^6";
String[] sArr = s.split("\\^");
double[] dArr = {Double.valueOf(sArr[0]), Double.valueOf(sArr[1])};
System.out.println(Math.pow(dArr[0], dArr[1]));

这应该让你开始。印刷:

729.0

当然,对于复杂的方程,您将不得不编写代码来相应地处理它。

如果你的方程有括号,你Stack可以检查左括号和右括号。如果方程是这样的:3 ^ 6 ^ 2,计算循环中的指数。

于 2020-06-11T20:57:59.653 回答
1

如果您想进行通用表达式评估,请查看此内容:

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class Main {

  static ScriptEngineManager mgr = new ScriptEngineManager();
  static ScriptEngine engine = mgr.getEngineByName("mvel");

  public static void main(String[] args) throws ScriptException {
    System.out.println(eval("3^6"));
    System.out.println(eval("(1+2)^(2*3)"));
    System.out.println(eval("2^2^2"));
  }

  private static Number eval(String expression) throws ScriptException {
    int idx = expression.indexOf('^');
    if (idx > 0) {
      String left = expression.substring(0, idx);
      String right = expression.substring(idx + 1);
      double base = eval(left).doubleValue();
      double exp = eval(right).doubleValue();
      return Math.pow(base, exp);
    }

    return (Number) engine.eval(expression);
  }
}

输出:

729.0
729.0
16.0
于 2020-06-11T21:17:01.280 回答