Java字符串指数[关闭]
Posted
技术标签:
【中文标题】Java字符串指数[关闭]【英文标题】:Java String exponents [closed] 【发布时间】:2020-06-11 20:46:03 【问题描述】:我将如何计算String number = "3^6"
?
有计算指数的数学选项,但我如何将字符串转换为 java 数学类可以解决的问题?
【问题讨论】:
它总是采用这种精确的形式,还是您希望处理任意复杂的方程?您是否尝试过编写可以分享以寻求帮助的代码? 使用 indexOf() 找到字符串中的指数符号,使用 substring() 取出它前后的部分,使用 Integer.parseInt() 将它们转换为数字,然后调用 Math.pow( )。 计算数学表达式的一般问题,例如见JEP:sourceforge.net/projects/jep 如果您打算花时间这样做,那么为什么不编写一个程序将代数表达式转换为后置 (RPN) 表示法,然后对其进行评估。 我使用了调车场算法,但这并不意味着它知道如何求解指数。所以是的,他们已经是 RPN。 【参考方案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
【讨论】:
【参考方案2】: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
,则计算循环中的指数。
【讨论】:
以上是关于Java字符串指数[关闭]的主要内容,如果未能解决你的问题,请参考以下文章